¿øÇü |
DWORD SetClassLong( HWND hWnd, int nIndex, LONG dwNewLong); | ||||||||||||||||||||
MFC ¿øÇü |
ÇØ´çÇÏ´Â ÇÔ¼ö ¾øÀ½ | ||||||||||||||||||||
Àμö |
¢º hWnd : ¼öÁ¤ÇÒ Å¬·¡½º°¡ ¼ÓÇØÀÖ´Â À©µµ¿ìÀÇ ÇÚµé. À©µµ¿ìÀÇ ÇÚµéÀ» ÅëÇØ À©µµ¿ì Ŭ·¡½º¸¦ °£Á¢ÀûÀ¸·Î ÁöÁ¤ÇÏ¸ç ¼öÁ¤´ë»óÀº ÀÌ À©µµ¿ì°¡ ¾Æ´Ï¶ó À©µµ¿ì°¡ ¼ÓÇØÀÖ´Â À©µµ¿ì Ŭ·¡½ºÀÌ´Ù. ¢º nIndex : ¼öÁ¤ÇÒ °ªÀ» ÁöÁ¤ÇÏ¸ç ´ÙÀ½ °ª Áß Çϳª¸¦ ÁöÁ¤ÇÑ´Ù. À©µµ¿ì Ŭ·¡½º¸¦ µî·ÏÇÒ ¶§ »ç¿ëÇÏ´Â WNDCLASS ±¸Á¶Ã¼ÀÇ ¸â¹ö¿¡ ´ëÀÀµÈ´Ù.
¶Ç´Â À©µµ¿ì Ŭ·¡½º¿¡ ¿©ºÐ ¸Þ¸ð¸®°¡ µî·ÏµÇ¾î ÀÖÀ» °æ¿ì ¿©ºÐ ¸Þ¸ð¸®ÀÇ ¿ÀÇÁ¼ÂÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÀÌ °ªÀº ¹Ýµå½Ã ¾ç¼ö¿©¾ß Çϸç cbClsExtra-4º¸´Ù´Â ÀÛ¾Æ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ¿©ºÐ ¸Þ¸ð¸®°¡ 16¹ÙÀÌÆ® ÁöÁ¤µÇ¾î ÀÖÀ¸¸é nIndex´Â 0~12±îÁö ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¢ºdwNewLong : »õ·Î º¯°æÇÒ 32ºñÆ®°ªÀ̸ç nIndex¿¡ µû¶ó °ªÀÇ Àǹ̴ ´Þ¶óÁø´Ù. | ||||||||||||||||||||
¸®ÅÏ |
¼º°øÇϸé ÀÌÀü¿¡ ¼³Á¤µÇ¾î ÀÖ´ø 32ºñÆ®°ªÀ» ¸®ÅÏÇÏ¸ç °ªÀÌ ¼³Á¤µÇ¾î ÀÖÁö ¾Ê¾ÒÀ¸¸é 0À» ¸®ÅÏÇÑ´Ù. ¶ÇÇÑ ¿¡·¯°¡ ¹ß»ýÇصµ 0À» ¸®ÅÏÇÑ´Ù. | ||||||||||||||||||||
¼³¸í |
À©µµ¿ì Ŭ·¡½º´Â WNDCLASS(EX) ±¸Á¶Ã¼¿¡ ÀÇÇØ ¼Ó¼ºµéÀÌ ÁöÁ¤µÇ¸ç RegisterClass(Ex) ÇÔ¼ö¿¡ ÀÇÇØ ÀÌ ¼Ó¼ºµéÀÌ µî·ÏµÈ´Ù. ÀÏ´Ü µî·ÏµÈ Ŭ·¡½ºÀÇ ¼Ó¼ºÀ» º¯°æÇÏ°íÀÚ ÇÒ ¶§ SetClassLong ÇÔ¼ö°¡ »ç¿ëµÇ´Âµ¥ WNDCLASS ±¸Á¶Ã¼ÀÇ ¸â¹ö Áß ¾î¶² °ªÀ» º¯°æÇÒ °ÍÀΰ¡¸¦ nIndex Àμö·Î ÁöÁ¤ÇØ ÁÖ°í dwNewLong Àμö·Î »õ·Î¿î ¼Ó¼º°ªÀ» ÁöÁ¤ÇØ ÁÖ¸é µÈ´Ù. ´Ü À©µµ¿ì Ŭ·¡½ºÀÇ Á¤º¸ Áß À̸§Àº º¯°æÇÒ ¼ö ¾ø´Ù. À©µµ¿ì Ŭ·¡½ºÀÇ ¼Ó¼º Áß ¾î¶² °ÍÀ» º¯°æÇϴ°¡¿¡ µû¶ó È¿°ú´Â ´Ù¾çÇÏ°Ô ³ªÅ¸³´Ù. ¹è°æ ºê·¯½Ã¸¦ º¯°æÇÒ ¼öµµ ÀÖ°í Ä¿¼ ¸ð¾çÀ» ¹Ù²Ü ¼öµµ ÀÖ°í À©µµ¿ì ÇÁ·Î½ÃÀú¸¦ º¯°æÇÒ ¼öµµ ÀÖ´Ù. À̾îÁö´Â ¿¹Á¦·Î ÀÌ ÇÔ¼öÀÇ »ç¿ë¿¹¸¦ »ìÆ캸µµ·Ï ÇÏÀÚ. ´ÙÀ½ ¿¹Á¦´Â ÀÌ¹Ì ¸¸µé¾îÁø À©µµ¿ìÀÇ Ä¿¼¸¦ º¯°æÇÑ´Ù. À©µµ¿ìÀÇ ÀÛ¾÷¿µ¿ª¿¡¼ º¸¿©ÁÙ Ä¿¼´Â À©µµ¿ì Ŭ·¡½ºÀÇ hCursor¸â¹ö¿¡¼ ÁöÁ¤Çϴµ¥ ÀÌ ¸â¹ö¸¦ SetClassLong ÇÔ¼ö·Î ½ÇÇàÁß¿¡ º¯°æÇÏ´Â ¿¹¸¦ º¸ÀδÙ. HCURSOR hArrow, hIBeam, hWait, hNow; LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; char Mes[]="¸¶¿ì½º ¹öÆ°À» ´©¸£¸é Ä¿¼ ¸ð¾çÀÌ ¹Ù²ò´Ï´Ù"; switch(iMessage) { case WM_CREATE: hArrow=LoadCursor(NULL,IDC_ARROW); hIBeam=LoadCursor(NULL,IDC_IBEAM); hWait=LoadCursor(NULL,IDC_WAIT); hNow=hArrow; return 0; case WM_LBUTTONDOWN: if (hNow==hArrow) hNow=hIBeam; else if (hNow==hIBeam) hNow=hWait; else hNow=hArrow; SetClassLong(hWnd, GCL_HCURSOR,(LONG)hNow); return 0; case WM_PAINT: hdc=BeginPaint(hWnd, &ps); TextOut(hdc,10,10,Mes,lstrlen(Mes)); EndPaint(hWnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } ¼¼°³ÀÇ Ç¥ÁØ Ä¿¼¸¦ ¹Ì¸® ¸¸µé¾î µÎ°í ¸¶¿ì½º ¹öÆ°À» ´©¸¦ ¶§¸¶´Ù À©µµ¿ì Ŭ·¡½ºÀÇ hCursor ¸â¹ö¸¦ º¯°æÇÔÀ¸·Î½á Ä¿¼¸¦ ¹Ù²Ù°í ÀÖ´Ù. ÀÛ¾÷¿µ¿ª ÀüüÀÇ Ä¿¼¸¦ º¯°æÇÒ ¶§´Â ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ°í ȸéÀÇ Æ¯Á¤ ºÎÀ§¿¡¼¸¸ Ä¿¼¸¦ º¯°æÇÒ ¶§´Â WM_SETCURSOR ¸Þ½ÃÁö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â À©µµ¿ì Ŭ·¡½º¿¡ µî·ÏµÇ¾î ÀÖ´Â ¸Þ½ÃÁö ó¸® ÇÔ¼ö¸¦ ½ÇÇàÁß¿¡ º¯°æÇÏ´Â Àü¿ª ¼ºêŬ·¡½ÌÀ» º¸¿©ÁØ´Ù. À©µµ¿ì Ŭ·¡½ºÀÇ À©µµ¿ì ÇÁ·Î½ÃÀú¸¦ º¯°æÇϸé ÀÌÈÄ ÀÌ À©µµ¿ì Ŭ·¡½º·ÎºÎÅÍ »ý¼ºµÇ´Â ¸ðµç À©µµ¿ìµéÀº º¯°æµÈ À©µµ¿ì ÇÁ·Î½ÃÀú°¡ ¸Þ½ÃÁö¸¦ ó¸®ÇÔÀ¸·Î½á ¸Þ½ÃÁö ó¸® ¹æ½ÄÀ» ¹Ù²Ü ¼ö ÀÖ´Ù. ¸ðµç ÄÁÆ®·ÑÀÇ µ¿ÀÛ ¹æ½ÄÀ» ¹Ù²Ù°íÀÚ ÇÒ ¶§ ÀÌ ¹æ¹ýÀÌ »ç¿ëµÈ´Ù. HWND hEdit1, hEdit2, hEdit3, hEditHidden; WNDPROC OldEditProc; LRESULT CALLBACK EditSubProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { char str[256]; switch (iMessage) { case WM_KEYDOWN: if (wParam==VK_RETURN) { GetWindowText(hWnd,str,256); SetWindowText(GetParent(hWnd),str); } break; } return CallWindowProc(OldEditProc,hWnd,iMessage,wParam,lParam); } LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; char Mes[]="¸ðµç ¿¡µðƮŰÀÇ EnterÅ° ÀÔ·ÂÀ» °ËÃâÇÕ´Ï´Ù"; switch(iMessage) { case WM_CREATE: hEditHidden=CreateWindow("edit",NULL,WS_CHILD | WS_BORDER, 10,10,200,25,hWnd,(HMENU)0,g_hInst,NULL); OldEditProc=(WNDPROC)SetClassLong(hEditHidden,GCL_WNDPROC,(LONG)EditSubProc); hEdit1=CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER, 10,10,300,25,hWnd,(HMENU)1,g_hInst,NULL); hEdit2=CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER, 10,50,300,25,hWnd,(HMENU)1,g_hInst,NULL); hEdit3=CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER, 10,90,300,25,hWnd,(HMENU)1,g_hInst,NULL); SetFocus(hEdit1); return 0; case WM_PAINT: hdc=BeginPaint(hWnd, &ps); TextOut(hdc,10,120,Mes,strlen(Mes)); EndPaint(hWnd, &ps); return 0; case WM_DESTROY: SetClassLong(hEdit1,GCL_WNDPROC,(LONG)OldEditProc); PostQuitMessage(0); return 0; } return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } 4°³ÀÇ ¿¡µðÆ® ÄÁÆ®·ÑÀ» »ý¼ºÇϴµ¥ ÀÌ Áß hEditHidden´Â Àü¿ª ¼ºê Ŭ·¡½ÌÀ» À§ÇØ »ç¿ëÇÒ ¼û°ÜÁø ¿¡µðÆ® ÄÁÆ®·ÑÀÌ´Ù. À©µµ¿ì Ŭ·¡½º´Â À©µµ¿ì ÇÚµé·Î °£Á¢ÀûÀ¸·Î ÁöÁ¤ÇÒ ¼ö Àֱ⠶§¹®¿¡ Àü¿ª ¼ºê Ŭ·¡½ÌÀ» Çϱâ À§Çؼ´Â ¹Ýµå½Ã ¸ÕÀú ¸¸µé¾îÁø À©µµ¿ì°¡ ÀÖ¾î¾ß ÇÑ´Ù. ±×·¯³ª Àü¿ª ¼ºê Ŭ·¡½ÌÀÇ È¿°ú´Â ¸ÕÀú ¸¸µé¾îÁø À©µµ¿ì¿¡´Â Àû¿ëµÇÁö ¾ÊÀ¸¹Ç·Î ¼û°ÜÁø À©µµ¿ì¸¦ ¸ÕÀú ¸¸µé°í ÀÌ À©µµ¿ì¸¦ ´ë»óÀ¸·Î Àü¿ª ¼ºêŬ·¡½ÌÀ» ÇÑ´Ù. Àü¿ª ¼ºêŬ·¡½ÌÀº SetClassLong ÇÔ¼ö·Î GCL_WNDPROC°ªÀ» »õ·Î¿î À©µµ¿ì ÇÁ·Î½ÃÀú·Î ´ëüÇÔÀ¸·Î½á ±¸ÇöµÈ´Ù. ¿¹Á¦¿¡¼´Â »õ·Î¿î À©µµ¿ì ÇÁ·Î½ÃÀú·Î »ç¿ëÇÒ EditSubProcÀ̶ó´Â Äݹé ÇÔ¼ö°¡ ¹Ì¸® Á¤ÀǵǾî ÀÖÀ¸¸ç ÀÌ ÇÔ¼ö´Â ¹Ýµå½Ã WndProc°ú °°Àº ¿øÇüÀ» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. À©µµ¿ì ÇÁ·Î½ÃÀú¸¦ »õ·Î¿î ÇÔ¼ö·Î ´ëüÇÒ ¶§ ¹Ýµå½Ã ÀÌÀü¿¡ ¼³Á¤µÇ¾î ÀÖ´ø À©µµ¿ì ÇÁ·Î½ÃÀú ÁÖ¼Ò¸¦ ÀúÀåÇØ µÎ¾î¾ß µðÆúÆ® ¸Þ½ÃÁö 󸮸¦ ÇÒ ¼ö Àִµ¥ ¿¹Á¦¿¡¼´Â OldEditProc À̶ó´Â º¯¼ö¿¡ SetClassLong ÇÔ¼ö°¡ ¸®ÅÏÇÏ´Â ÀÌÀü ÇÔ¼öÀÇ ¹øÁö¸¦ ÀúÀåÇØ µÎ¾ú´Ù. Àü¿ª ¼ºêŬ·¡½ÌÀ» ÇÑ ÈÄ ¸¸µé¾îÁø hEdit1, hEdit2, hEdit3 ÄÁÆ®·ÑÀº EditSubProcÀ̶ó´Â ÇÔ¼ö°¡ ¸Þ½ÃÁö¸¦ ó¸®ÇÏ°Ô µÈ´Ù. ÀÌ ÇÔ¼ö¿¡¼´Â ¿£ÅÍÅ° ÀÔ·ÂÀÌ ÀÖÀ» ¶§ ÀÚ½ÅÀÇ ÅؽºÆ®¸¦ ÀÐ¾î ¸ÞÀÎ À©µµ¿ìÀÇ Ä¸¼Ç¿¡ Ãâ·ÂÇÏ´Â ÀÏÀ» ÇÏ°í Àִµ¥ ÀÌ¿Ü¿¡ ¾î¶°ÇÑ ´Ù¸¥ ¸Þ½ÃÁö 󸮵µ °¡´ÉÇÏ´Ù. ¿¡µðÆ®¿¡ ¹®ÀÚ¿À» ÀÔ·ÂÇÑ ÈÄ EnterÅ°¸¦ ´©¸£¸é ¸ÞÀÎ À©µµ¿ìÀÇ Ä¸¼ÇÀÌ Áï½Ã º¯°æµÈ´Ù. ´ÙÀ½ ¿¹Á¦´Â À©µµ¿ì Ŭ·¡½ºÀÇ ½ºÅ¸ÀÏÀ» ½ÇÇàÁß¿¡ º¯°æÇÑ´Ù. LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; char Mes[]="¸¶¿ì½º ¹öÆ°À» ´©¸¦ ¶§¸¶´Ù HREDRAW, VREDRAW ½ºÅ¸ÀÏÀ» Åä±ÛÇÕ´Ï´Ù"; RECT rt; DWORD clsStyle; switch(iMessage) { case WM_LBUTTONDOWN: clsStyle=GetClassLong(hWnd,GCL_STYLE); if (clsStyle & CS_HREDRAW) { clsStyle=clsStyle & ~(CS_HREDRAW | CS_VREDRAW); } else { clsStyle=clsStyle | (CS_HREDRAW | CS_VREDRAW); } SetClassLong(hWnd,GCL_STYLE,clsStyle); InvalidateRect(hWnd,NULL,TRUE); return 0; case WM_PAINT: hdc=BeginPaint(hWnd, &ps); TextOut(hdc,10,10,Mes,lstrlen(Mes)); GetClientRect(hWnd,&rt); Ellipse(hdc,rt.left,rt.top+50,rt.right,rt.bottom); EndPaint(hWnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } ¸¶¿ì½º ¹öÆ°À» ´©¸¦ ¶§¸¶´Ù CS_HREDRAW, CS_VREDRAW ½ºÅ¸ÀÏÀ» Åä±ÛÇÔÀ¸·Î½á ÀÛ¾÷¿µ¿ª ±×¸®±â¿¡ ¿µÇâÀ» ÁØ´Ù. ÀÌ µÎ ½ºÅ¸ÀÏÀÌ ÁöÁ¤µÇ¾î ÀÖÀ¸¸é ÀÛ¾÷¿µ¿ª Å©±â°¡ ¹Ù²ð ¶§¸¶´Ù ´Ù½Ã ±×·ÁÁöÁö¸¸ ±×·¸Áö ¾ÊÀ¸¸é Å©±â°¡ ¹Ù²î¾îµµ ´Ù½Ã ±×·ÁÁöÁö ¾Ê±â ¶§¹®¿¡ ´ÙÀ½°ú °°ÀÌ È¸éÀÌ ±úÁö°Ô µÈ´Ù. ÀÌ¿Ü¿¡ ÀÌ ÇÔ¼ö´Â À©µµ¿ìÀÇ ¹è°æ ºê·¯½Ã¸¦ ¹Ù²Ù°Å³ª ¸Þ´º¸¦ ¹Ù²Ù´Â ¿ëµµ·Îµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. | ||||||||||||||||||||
Âü°íÇÔ¼ö |
GetClassLong : À©µµ¿ì Ŭ·¡½ºÀÇ ¼Ó¼º°ªÀ» Á¶»çÇÑ´Ù. | ||||||||||||||||||||
Ç÷§Æû | 95ÀÌ»ó | ||||||||||||||||||||
ÂüÁ¶ |
À©µµ¿ì Ŭ·¡½º¿¡ ´ëÇؼ´Â 10-2ÀýÀ» ÂüÁ¶ÇÏ°í ¼ºêŬ·¡½Ì¿¡ ´ëÇؼ´Â 11-2ÀýÀ» ÂüÁ¶Çϱ⠹ٶõ´Ù. |
written by http://www.winapi.co.kr
|