'Dialog'에 해당되는 글 2건

  1. 2008/07/01 귀차니스트 Child Window Mouse Message 문제.
  2. 2008/02/28 귀차니스트 유저 인터페이스를 생각하라!? (2)

Child Window Mouse Message 문제.

Programming 2008/07/01 23:17 귀차니스트

  이런 문제를 한 번쯤 겪어보셨을지 모르겠습니다. 필요에 의해서 프로그래밍을 하다 보니 이런 경우가 생기더군요. MDI Window를 쓰지 않고, 해당 윈도우를 Mdi Child화 비슷하게 사용하는 것이죠. 그래서 이 구현으로 인해 다이얼로그를 2개 만들고 하나의 다이얼로그 윈도우의 부모를 다른 하나의 다이얼로그로 지정해 주었습니다. 그랬더니 자식으로 설정된 다이얼로그에 존재하는 컨트롤에 키보드나 마우스 메시지가 전달되지 않더군요. 물론 기본적으로 생성할 경우에 그렇습니다.



Parent.cpp (Language : cpp)
  1. abc.Create(IDD_DIALOG, this);
  2. abc.SetParent(this);
  3. abc.ShowWindow(SW_SHOW);

  바로 위와 같은 경우를 만들 경우 빨간 사각형으로 강조된 컨트롤이 반응하지 않게 됩니다. 아예 키보드를 누르나 마우스를 누르나 동작하지 않는 것이죠. C# 에서는 입력은 되지만 마우스 메시지가 제대로 먹지 않더군요. 마우스 메시지가 잘 먹지 않는다면 해당 윈도우에 대한 텍스트 선택, 편집 작업이 무척 불편하게 됩니다. 그래서 이런 저런 해결방법을 찾아봤습니다. 결국 하나의 방법이 나오긴 하더군요.



  잘 보이지는 않지만 해당 자식 Dialog의 Border를 None으로 설정해주시면 됩니다. 이렇게 하면 결국 메시지가 제대로 전달되고 작동되더군요. Control 자체를 작성하는 경우도 존재하기 때문에 기본 WndProc 에서 Border에 따른 처리를 하는 것 같더군요.



  제대로 작동 되는 군요. 물론 여기서 내부 다이얼로그 박스가 윈도우 처럼 작동하기 위해서는 WM_NCHITTEST 등의 메시지를 처리하거나, MOUSEDOWN, MOUSEUP, MOUSEMOVE등의 작업을 수동적으로 제어하여 윈도우의 위치를 이동해주어야 합니다. 약간 번거롭긴 하네요.
  따로 해결할 수 있는 방법이 있는지는 모르겠지만 제가 찾은 방법은 이것이더군요. 무난하게 작동하긴 하니 뭐 별 문제는 없습니다. 하지만 혹시 더 좋은 방법이 있음 댓글로 달아주셨으면 합니다.
  그럼 내일도 즐거운 하루 되시길 바라면서 좋은 꿈 꾸세요^^.

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/07/01 23:17 2008/07/01 23:17

댓글을 달아 주세요

유저 인터페이스를 생각하라!?

Small Talk 2008/02/28 22:34 귀차니스트




  위 스크린샷은 제가 임의로 비주얼 스튜디오의 Dialog 편집툴을 사용하여 Install Sheild 화면같이 만들어본 창 입니다. 두 개의 화면을 보고 어떤 창이 더 자연스럽고 어색하지 않다고 느끼시나요?? 전 개인적으로 첫 번째 창이 더 자연스럽다고 생각합니다. 입력창의 위치 비율이 아래의 것보다는 더 잘 매치된다고 느끼니까요. 그런데 의외로 프로그래밍을 하다보면 이러한 점들이 중요하답니다. 왜냐하면 엔드유저인 사용자가 맞닥뜨리는 가장 큰것은 바로 그래픽 인터페이스 이기 때문이죠.
  위 그림들과 비슷한 창을 사용한 글이 인터넷 어딘가에 있을 것입니다. 아쉽게도 저도 오래전에 보았고 기억이 가물가물해서 지금와서는 찾지를 못하겠군요. 그런데 그 글을 보았을 당시 많은 생각을 하게 되었습니다. 사실 프로그래밍( 코딩이라고 해야 할까요^^? )하는 사람치고 일반인이 프로그램을 접했을 때 느끼는 생각을 해보기란 사실상 어렵습니다. 그래서 의외로 불편한 프로그램이 나올 때가 많죠. 물론 사용자가 건의를 하고 반영되어 편해지는 경우도 존재합니다. 하지만 그 것은 프로그램 이미지에 영향을 적지않게 미치겠죠.
  이런 것에 관심을 엄청 많이 가진 것은 아니었지만 그 글을 보고 난 후 이러한 책이 있었다면 좋겠다고 생각했었고 몇 일전 운 좋게 검색을 하다 비슷한 내용인 듯한 책을 찾게 되었습니다. 물론 컨트롤의 위치 같은 그러한 내용은 아닌것 같았습니다. 하지만 유용하게 보였죠. 그 책의 이름은 "humane interface 인간 중심 인터페이스" 입니다. 저자는 Hewlett-Packard, IBM, Motorola, NCR, Xerox, Ricoh, Cannon, McKesson, AT&T, Apple 등에서 유저 인터페이스 개발을 하던 사람이라고 합니다. 알고 있던 사람은 아니라서 내용이 어느정도가 될 것이다라고 추측은 못하겠지만 여타 다른 사람들 보다야 나은 뭔가가 있지 않을까 라고 생각하고 있는 중입니다.
  책 내용등의 자세한 것들은 저작권도 있으니 따로 올리거나 하기는 힘들 것 같고 한 번씩 포스팅 주제가 될지도 모르겠군요. 프로그래밍만이 기술이라고 생각하는 것에서 벗어나 이러한 점도 한 번 생각해보는 자세가 필요할 것 같기도 합니다.

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/02/28 22:34 2008/02/28 22:34

댓글을 달아 주세요

  1. 준호씨 2008/02/28 23:46  댓글주소  수정/삭제  댓글쓰기

    오타발견~ 사싱상(X) -> 사실상(O)