아래 행사처럼 진행하는 윈7 개발자 관련 세미나를 다녀왔습니다.
현재 거주하는 곳이 건국대와 아주 멀고 머~~어~~언 이유로…
아침6시30분에 일어나서 준비하고 7시에 집을 나서 세미나 시작 시간인 10시를 조금 넘어 도착하였습니다.
서울 한번 갔다 오는 것이 정말 "일" 이더군요;; 집에 도착하니 저녁 9시를 훌쩍 넘었습니다.
하지만 오랜만에 서울 공기를 맛보고 와서인지(?) 그리 피곤이 밀려오진 않네요.
일찍 참석하면 경품선물도 얻어올 수 있는 건데요. 아쉽게도 너무 늦게 출발(AM 7:00 ?응)하여 못 받았습니다.
참가비가 저렴한 것에 비하여 많은 것을 얻어서(지식) 왔습니다. 점심도 무료 제공 되었어요. ^^
윈도우 최신버전의 불신감으로 윈7도 1년 후에나 설치하여 만져볼 생각이었습니다.
그런데 이것저것 바뀐 것이 있고 안정되었다는 소리에 마음이 흔들리던 차에 개발자 세미나에 참여하게 되었습니다.
세미나는 아래와 같이 진행되었는데요~ 정말 듣고만 있는데도 힘들었습니다. 어후~
듣는데도 힘든데 이를 준비하신 분들을 생각하면 정말 대단하다는 생각밖에 안듭니다.
세미나 진행은 대부분 윈도7에서 새로 등장한 기능들에 대해 설명하고 간단하게 구현할 수 있는걸 보여주는 내용이었습니다.
보고 있으면 저렇게 쉽게 만들어도 되나 싶을 정도로 쉽게 구현된다는 이야기였습니다.
주 내용은 윈7에서 추가된 여러 기능들에 대해 설명을 하였습니다.
특히 작업표시줄의 기능에 많은 기능을 추가하였더군요.
점프 기능으로 각각의 프로그램이 최근작업문서를 가지고 바로 이동할 수 있는 기능과
문서의 미리보기 기능의 다양함, 그리고 작업아이콘 자체가 프로그래스바로 진행되는건 예쁘더군요.
그 외에 윈도우 시작메뉴와 작업표시줄의 기능이 적절하게 조합되어 조금 더 나은 기능을 보여주었습니다.
그 다음 세션은 배가 무지 고픈 시간에 얄밉게 배정된 멀티코어 프로그래밍 세션이었습니다.
일단 배고프니 쓰레드건 동기화건 병렬처리간 귀에서 웅웅대던데요.
대략 기억나는 요점은 코어가 여러 개면 프로그래머가 병렬로 처리할 수 있게끔 프로그래밍 짜줘야 다중코어 효과를 누린다는 것이었습니다.
그 방법으로는 하드코어한 프로그래머가 직접 나눠 짜는 방법이 있구요, 쓰레드를 여러 개 나눠 적절하게 돌리는 방법과 마지막으로 모든걸 인텔에서 제공해 주는
병렬처리를 잘 하는 컴파일러에 맡긴다 였습니다. 쓰레드와 컴파일러 옵션을 적절하게 섞어 사용하는 방법도 제시되었습니다.
그 다음은 점심시간! 비빔밥을 먹었는데요 일단 모양, 맛을 떠나서 배고팠던지 맛있게 먹었습니다.(역시 시장이 반찬!)
점심 후 오후 세션으로는 센서와 윈도7의 결합이었습니다. 요즘 많이 사용되는 가속도 센서, 조도센서 등을 이용하여
윈도 7에서 일반적으로 다룰 수 있는 장치를 만들자는 의도였습니다. 센서보드 개발업체는 윈도7 에 맞게 드라이버 까지 제공하면
SW개발자는 편하게 공통API를 사용하여 프로그래밍 할 수 있다는 내용이었습니다.
언뜻 듣기에는 개발자가 편하겠구나 생각했지만…
결국 하드웨어 업체에서는 장비를 팔기 위해서 MS에 종속적인 장비솔루션을 개발해야 할 듯 합니다.
또한 온도, 습도 같은 간단한 센서 장비를 사용하기 위해 드라이버까지 만든다는 건 배보다 배꼽이 더 클 수도 있겠구나 라는 생각이 들었습니다.
제가 생각하기에 결국 윈도 7에서 제공 될 수 있는 센서는 가격이 비싸서 개발비를 뽑을 수 있거나, 아니면 대기업 장비업체에서
자사제품의 시장점유율을 늘리기 위해서 보편된 디바이스를 제공하지 않을까 생각됩니다. 이런 쪽으로는 가지 않았으면 하는 개인적인 바램입니다.
그 다음 기능으로는 멀티터치 기능이었습니다. 시연을 보여주는데 데모귀신이 붙어 무지하게 센서가 튀었지만
멀티터치 기능도 그리 어렵게 구현하지 않는 것을 보고 내심 MS가 이 악물고 준비했다는 걸 알 수 있었습니다.
손가락과 범위 터치의 종류에 따라 여러 옵션이 있던데요. 빠른 시일 내에 터치가 보편화 되어야 길이 나올 듯 합니다.
멀티터치 환경이 안되는 분이 쓸 수 있는 팁도 있었는데요. 마우스 2개로 손가락 흉내를 내는 것을 보고 피식 하였습니다.
한번 해볼까 고민하고 있는 부분이기도 합니다. ^^
다음은 리본메뉴에 관해 설명한 내용입니다. 리본메뉴란 오피스2007부터 갑자기 바뀐 상단의 메뉴들을 말합니다.
윈7 에서는 이 리본메뉴에 대해서도 프레임웍을 제공하고 있어 어플리케이션에 리본메뉴를 쉽게 사용 할 수 있게 해준다고 합니다.
아직까지 오피스2007에 있는 리본메뉴도 적응이 안되어 과연 좋은 것인지 의문이 들긴 합니다.
그 다음 세션은 앞서 설명했던 것들을 .NET으로 사용하지 않고 VC++사용자가 어떻게 사용할 수 있을지에 관한 내용이었습니다.
위의 기능들을 사용하기 위해 VC++개발자가 .NET을 배운 다는건 조금 효용성이 떨어진다고 생각되긴 합니다.
이스트소프트의 실력 있는 개발자 분께서 화려한 키보드 드리블로 깔끔한 시연을 보여주셨습니다.
이미 오전에 본 내용이긴 하지만 VC++에 오니 복잡해 지는 것은 어쩔 수 없나 봅니다.
마지막으로 엔비디아 에서 GPU에 대해서 설명하였습니다. CPU는 단순연산! GPU는 영상처리 전용 연산!
이런 내용의 주제였습니다. 평소 게임을 하지 않아서 그래픽카드가 좋고 나쁘고를 그다지 체감하지 못하여
많이 신경쓰진 않았지만 무언가 전문성이 있는 장비를 이용한 처리가 범용적인 CPU 사용보다는 낫겠다는 이야기는 공감됩니다.
그리고 마지막으로는 경품 추천을 하였습니다. 아쉽게도 뽑히지는 않았지만 두근거리며 기다리는 즐거움을
오랜만에 느껴보았습니다. 꼭 수업시간에 매타작 문제풀기에 뽑히는 학생을 기다리는 긴장감이랄까?
어쨌든 이렇게 하루를 알차게 보내고 즐거운 마음으로 도착하여 글을 쓰고 있습니다.
한동안 활동이 없어 느슨해진 몸과 마음을 정비할 수 있는 하루였습니다.
출처 : howtobank 박진수
http://www.howtobank.net/vbboard/view.php?id=p_vnetlect1&no=193
PictureBox에 그림을 넣을 때 그림이 너무커서 다 보이지 않는 경우 마우스를 누르고 끌어당겼다 놓으면 마우스를 누른 점의 그림이 마우스를 놓은 점으로 그림이 전체적으로 이동하는 예이다.
[예제1] 버튼을 누르면 그림을 불러온다. 마우스에 의해 그림이 전체적으로 이동하나 그림영역 밖으로 나가지는 않는다. 불러온 그림은 FullImage이다.
Dim FullImage As Image
Dim X, Xd, Y, Yd As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Open As New OpenFileDialog()
Open.Filter = "모든 그림 파일|*.bmp;*.pic;*.jpg|BMP 파일|*.bmp|PIC 파일|*.pic|JPG 파일|*.jpg"
If Open.ShowDialog = DialogResult.Cancel Then Exit Sub
Dim FileName As String = Open.FileName
FullImage = Image.FromFile(FileName)
X = 0 : Y = 0
PictureBox1.Image = FullImage
End Sub
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
Xd = e.X : Yd = e.Y
End Sub
Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
Dim Xo, Yo, Xm, Ym As Integer
Xm = e.X : Ym = e.Y
Xo = X - Xm + Xd : Yo = Y - Ym + Yd
Xo = Math.Max(Xo, 0) : Xo = Math.Min(Xo, FullImage.Width - PictureBox1.Width)
Yo = Math.Max(Yo, 0) : Yo = Math.Min(Yo, FullImage.Height - PictureBox1.Height)
X = Xo : Y = Yo
PictureBox1.CreateGraphics.DrawImage(FullImage, New Point(-X, -Y))
End Sub
이 예제를 실행시켜 보면 그림이 이동함을 알 수 있다. 이 코드의 약점은 그림을 이동시킨 후 폼이 축소되었다가 확장할 때 또는 그림위에 다른 폼이 겹쳤다가 사라질 때 그림의 다른 부분이 중첩되거나 처음 불러온 상태로 바뀐다는 점이다. 따라서 이런 경우에도 상태를 유지하려면 아래와 같이 하여야 한다.
[예제2] 불러온 그림을 PictureBox1과 같은 크기의 다른 그림 PartImage에 그리고 이 PartImage를 PictureBox1의 Image로 한다. [예제1]은 PictureBox1에 그냥 그린 것이지 대입된 것이 아니다.
Dim FullImage, PartImage As Image
Dim G As Graphics
Dim X, Xd, Y, Yd As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Open As New OpenFileDialog()
Open.Filter = "모든 그림 파일|*.bmp;*.pic;*.jpg|BMP 파일|*.bmp|PIC 파일|*.pic|JPG 파일|*.jpg"
If Open.ShowDialog = DialogResult.Cancel Then Exit Sub
Dim FileName As String = Open.FileName
FullImage = Image.FromFile(FileName)
Dim W, H As Integer
W = PictureBox1.Width : H = PictureBox1.Height
PartImage = New Bitmap(W, H)
G = Graphics.FromImage(PartImage)
X = 0 : Y = 0
G.DrawImage(FullImage, New Point(X, Y))
PictureBox1.Image = PartImage
End Sub
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
Xd = e.X : Yd = e.Y
End Sub
Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
Dim Xo, Yo, Xm, Ym As Integer
Xm = e.X : Ym = e.Y
Xo = X - Xm + Xd : Yo = Y - Ym + Yd
Xo = Math.Max(Xo, 0) : Xo = Math.Min(Xo, FullImage.Width - PartImage.Width)
Yo = Math.Max(Yo, 0) : Yo = Math.Min(Yo, FullImage.Height - PartImage.Height)
G.DrawImage(FullImage, New Point(-Xo, -Yo))
PictureBox1.Image = PartImage
X = Xo : Y = Yo
End Sub