수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1694241
  • Today | 592
  • Yesterday | 588

1 Articles, Search for 'WaitCursor'

  1. 2007/03/22 WaitCursor가 만들어지지 않는 경우
Programming/MFC2007/03/22 17:19

WaitCursor가 만들어지지 않는 경우

원본 : http://www.debuglab.com/knowledge/waitcursor.html

1. 요약

여태껏 모래시계 커서를 만드는데 아무런 문제가 없으셨던 분은 다음 팁을 읽어주시기 바랍니다. 하지만 모래시계 커서를 만드는데 실패하셨던( 저처럼) 분들은 부디 유용하게 사용하시기 바랍니다.


2. 본문

API를 사용한다면 SetCursor() 를 호출함으로서 모래시계 커서를 만들 수 가 있습니다. MFC를 사용하신다면 보다 편하게 BeginWaitCursor()와 EndWaitCursor()를 호출하실 수 있습니다.

문제는 이것이 마음 먹은데로 잘 안된다는 데 있습니다.

가장 첫번째로 알아두셔야 할 점은 SetCursor()를 사용해서 마우스 커서를 바꾸시려면 윈도우 클래스의 커서가 반드시 NULL로 되어 있어야 한다는 겁니다. 그렇지 않다면 마우스가 움직일 때 마다 커서는 클래스에 등록된 것으로 변하게 됩니다.

그 이유는 WM_SETCURSOR 의 디폴트 구현에서 찾을 수 있을 겁니다. WM_SETCURSOR는 현재 non-client영역이라면 화살표 커서를 보여주고 client 영역이라면 클래스에 등록된 커서를 보여주도록 되어 있습니다.

그렇다면 WM_SETCURSOR 핸들러를 설치하는 방안을 생각해 볼 수 있습니다. 핸들러를 설치할 때 주의할 점은 반드시 TURE를 반환해서 자식 윈도우들에게 WM_SETCURSOR 메시지가 가는 것을 막아야 합니다. DefWindowProc()는 WM_SETCURSOR를 처리하기 전에 부모 윈도우에게 메시지를 보내기 때문입니다. 부모가 TRUE를 반환한다면 더 이상의 작업은 진행되지 않습니다.

아주 복잡하지만 원하던 모래시계 커서를 얻게 되었습니다.

하지만 제가 접한 어느 문서에도 이렇게 복잡한 방법을 설명하고 있지는 않은 것 같습니다. 왜 제가 구현한 방법은 이렇게 복잡해야만 하는지. 왜 BeginWaitCursor()가 나에게 모래시계 커서를 주지 않는 것인지..

스레드는 저마다 local input state variable을 가지고 있습니다. 이 곳에는 마우스 커서의 모양도 보관되어 있습니다. 이 사실을 기억하시고 다음의 일반적인 시나리오를 읽어보십시오.

우리는 모래시계 커서를 얻기 위해서 SetCursor()를 호출합니다. 이는 local input state variable에서 커서의 모양을 변경시킵니다. 그리고 나서 우리는 아주 시간이 오래 걸리는 루프를 실행합니다. 우리가 루프를 실행하는 동안에도 사용자는 마우스를 움직였습니다. 시스템은 WM_SETCURSOR 메시지를 우리에게 보내주었지만 우리의 프로그램은 너무 바뻐서 메시지를 처리할 수 없습니다. 그 사실을 안 시스템은 local input state variable에 저장된 마우스 커서의 모양을 사용합니다.

아시겠죠?? BeginWaitCursor()과 EndWaitCursor()는 한 함수( 메시지 핸들러)내에서 사용하도록 고안된 것이었습니다.( 제 생각에는..) 그러니까 해결책은 바로.. UI스레드를 블로킹 시켜버리는 것이 될 수 있겠습니다.

여기서 보너스!!
너무 바뻐서 WM_PAINT 조차 처리할 수 없다는 사실을 시스템이 알아차린다면 시스템은 친절하게도 윈도우의 프레임과 배경을 직접 그려줍니다. 그러므로 우리의 다이렉트 폰 서버 프로그램 같이 WM_NCPAINT를 훔쳐내서 장식을 하는 프로그램이 장시간 응답을 할 수 없는 경우에는 그 실체가 폭로되어 버립니다.

감사합니다.


3. 예제 코드

없슴


4. 참조

Advanced Windows Programming( Chap 11)



- 2001.08.19 Smile Seo -
"MFC" 카테고리의 다른 글
  • TLS(Thread Local Storage) (0)2007/03/23
  • DECLARE_DYNCREATE()와 IMPLEMENT_DYNCREATE() (0)2007/03/22
  • WaitCursor가 만들어지지 않는 경우 (0)2007/03/22
  • Dll Rebase 시키기 (0)2007/03/21
  • Delayload 적용시키기 (0)2007/03/21
2007/03/22 17:19 2007/03/22 17:19
Posted by webdizen
Tags WaitCursor
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2725

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • System
  • 양방향 트랜잭션 복제
  • ShellExcute
  • 서버 로그인
  • 대운동장
  • Mobile
  • 몽랑볼 볼리노
  • 정보 시스템
  • 유혹
  • 집중
  • 인터페이스
  • XML Web Service
  • Project
  • Perl
  • Connection String
  • printf
  • /dev/random
  • 프린트 다이얼로그
  • Structure
  • DAO

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.