WM_GETDLGCODE

Àμö

wParam : »ç¿ëµÇÁö ¾ÊÀ½

lParam : Àü´ÞµÈ ¸Þ½ÃÁöÀÎ MSG ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍÀ̸ç ÄÁÆ®·ÑÀº Àü´ÞµÈ ¸Þ½ÃÁö¿¡ µû¶ó ´Ù¸¥ °á°ú¸¦ ¸®ÅÏÇÒ ¼öµµ ÀÖ´Ù. ½Ã½ºÅÛÀÌ ´Ü¼øÇÑ Áú¹®À» ÇÏ´Â Áß¿¡´Â NULLÀÌ Àü´ÞµÈ´Ù.

¼³¸í

ÀÌ ¸Þ½ÃÁö´Â ´ëÈ­»óÀÚ³»ÀÇ ÄÁÆ®·Ñµé¿¡°Ô ¾î¶² Á¾·ùÀÇ ÀÔ·ÂÀ» ¿øÇÏ´ÂÁö Áú¹®Çϱâ À§ÇØ º¸³»Áø´Ù. ´ëÈ­»óÀÚ¿¡¼­ »ç¿ëÀÚÀÇ ¸ðµç Å° ÀÔ·ÂÀº ´ëÈ­»óÀÚ°¡ ¸ÕÀú ¹ÞÀ¸¸ç Æ÷Ä¿½º¸¦ °¡Áø ÄÁÆ®·ÑÀÌ ¿øÇÒ °æ¿ì¸¸ ÄÁÆ®·Ñ¿¡°Ô Àü´ÞµÈ´Ù. ¸¸¾à ÄÁÆ®·ÑÀÌ º°´Ù¸¥ ÀÔ·ÂÀ» ó¸®ÇÏÁö ¾Ê°Ú´Ù°í ÀÀ´äÇÏ¸é ´ëÈ­»óÀÚ´Â Tab, Enter, Esc, Ä¿¼­ À̵¿Å° µî¿¡ ´ëÇØ µðÆúÆ® 󸮸¦ ÇÑ´Ù. TabÅ°´Â ÄÁÆ®·Ñ°£ÀÇ Æ÷Ä¿½º À̵¿À» Çϸç EnterÅ°´Â µðÆúÆ® ¹öÅÏÀ» ´©¸£´Â °Í°ú °°¾ÆÁø´Ù.

ÄÁÆ®·ÑµéÀº ÀÚ½ÅÀÇ ÇÊ¿ä¿¡ µû¶ó ÀÌ ¸Þ½ÃÁö¿¡ ÀÀ´äÇÏ¿© ¾î¶² ÀÔ·ÂÀ» ¿øÇÑ´Ù´Â °ÍÀ» ´ëÈ­»óÀÚ¿¡°Ô ¾Ë·Á ÁÖ¾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ES_WANTRETURN ½ºÅ¸ÀÏÀ» °¡Áö´Â ¿¡µðÆ® ÄÁÆ®·ÑÀº Enter Å° ÀÔ·ÂÀ» ¹Þ¾Æµé¿© °³ÇàÇØ¾ß Çϸç ÀÌ °æ¿ì EnterÅ°´Â µðÆúÆ® ¹öÆ°À» ´©¸£Áö ¾Ê°Ô µÈ´Ù. ÄÁÆ®·ÑÀº ÀÚ½ÅÀÇ µ¿ÀÛ°ú ½ºÅ¸ÀÏ, ±×¸®°í lParamÀ¸·Î Àü´ÞµÈ ¸Þ½ÃÁö¸¦ º¸°í ¿øÇÏ´Â Å° ÀԷ¿¡ ´ëÇØ ÀÀ´äÇØ¾ß ÇÑ´Ù. DefWindowProcÀº ÀÌ ¸Þ½ÃÁö¿¡ ´ëÇØ Ç×»ó 0À» ¸®ÅÏÇϵµ·Ï µÇ¾î ÀÖÀ¸¹Ç·Î Ä¿½ºÅÒ ÄÁÆ®·ÑÀÌ ÀÌ ¸Þ½ÃÁö¸¦ ó¸®ÇÏÁö ¾ÊÀ¸¸é ´ëÈ­»óÀÚ°¡ ó¸®ÇÏ´Â Å° ÀÔ·ÂÀº ¹ÞÀ» ¼ö ¾ø´Ù. ´ëÈ­»óÀÚ¿¡¼­ »ç¿ëµÉ ÄÁÆ®·Ñ ¶Ç´Â Ç¥ÁØ ÄÁÆ®·ÑÀ» ¼­ºê Ŭ·¡½ÌÇÒ ¶§´Â ÀÌ ¸Þ½ÃÁö¿¡ ´ëÇØ ÀûÀýÈ÷ ÀÀ´äÇØ¾ß ÇÑ´Ù.

¸®ÅÏ

¾î¶² Á¾·ùÀÇ ÀÔ·ÂÀ» ¿øÇÏ´ÂÁö¸¦ ´ÙÀ½ °ªµéÀÇ Á¶ÇÕÀ¸·Î ¸®ÅÏÇØ ÁØ´Ù.

°ª

½ÇÁ¦°ª(16Áø¼ö)

¼³¸í

DLGC_BUTTON

200

¹öÆ°ÀÌ´Ù.

DLGC_DEFPUSHBUTTON

10

µðÆúÆ® ¹öÆ°ÀÌ´Ù.

DLGC_HASSETSEL

8

EM_SETSEL ¸Þ½ÃÁö¸¦ ¿øÇÑ´Ù.

DLGC_RADIOBUTTON

40

¶óµð¿À ¹öÆ°ÀÌ´Ù.

DLGC_STATIC 100 ½ºÅÂƽ ÄÁÆ®·ÑÀÌ´Ù.
DLGC_UNDEFPUSHBUTTON 20 µðÆúÆ® Ǫ½¬ ¹öÆ°ÀÌ ¾Æ´Ï´Ù.
DLGC_WANTALLKEYS 4 ¸ðµç Å° ÀÔ·ÂÀ» ¿øÇÑ´Ù.
DLGC_WANTARROWS 1 Ä¿¼­ À̵¿Å°¸¦ ¿øÇÑ´Ù.
DLGC_WANTCHARS 80 WM_CHAR ¸Þ½ÃÁö¸¦ ¿øÇÑ´Ù.
DLGC_WANTMESSAGE 4 ¸ðµç Å° ÀÔ·ÂÀ» ¿øÇÑ´Ù.
DLGC_WANTTAB 2 ÅÇ Å° ÀÔ·ÂÀ» ¿øÇÑ´Ù.
¿¹Á¦

¿¹Á¦ 1

´ÙÀ½ ¿¹Á¦´Â ´ëÈ­»óÀÚ¿¡ Ç¥ÁØ ÄÁÆ®·ÑµéÀ» ¹èÄ¡ÇÑ ÈÄ ÀÌ ÄÁÆ®·ÑµéÀÌ WM_GETDLGCODE ¸Þ½ÃÁö¿¡ ´ëÇØ ¾î¶»°Ô ¹ÝÀÀÇÏ´ÂÁö¸¦ Å×½ºÆ®ÇÑ´Ù.

#include 
#include "resource.h"

BOOL CALLBACK MainDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
HINSTANCE g_hInst;
HWND hDlgMain;

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
	,LPSTR lpszCmdParam,int nCmdShow)
{
	g_hInst=hInstance;
	
	DialogBox(g_hInst, MAKEINTRESOURCE(IDD_DIALOG1), HWND_DESKTOP, MainDlgProc);
	
	return 0;
}

void DlgCodeTest(HWND hDlg)
{
	LRESULT code;
	TCHAR str[256];
	TCHAR Mes[1024]={0,};

	code=SendDlgItemMessage(hDlg,IDC_EDIT1,WM_GETDLGCODE,0,NULL);
	wsprintf(str, "¿¡µðÆ®1 = %x\r\n", code);
	lstrcat(Mes,str);
	code=SendDlgItemMessage(hDlg,IDC_EDIT2,WM_GETDLGCODE,0,NULL);
	wsprintf(str, "¿¡µðÆ®2 = %x\r\n", code);
	lstrcat(Mes,str);
	code=SendDlgItemMessage(hDlg,IDC_EDIT3,WM_GETDLGCODE,0,NULL);
	wsprintf(str, "¿¡µðÆ®3 = %x\r\n", code);
	lstrcat(Mes,str);
	code=SendDlgItemMessage(hDlg,IDC_COMBO1,WM_GETDLGCODE,0,NULL);
	wsprintf(str, "ÄÞº¸ ¹Ú½º = %x\r\n", code);
	lstrcat(Mes,str);
	code=SendDlgItemMessage(hDlg,IDC_LIST1,WM_GETDLGCODE,0,NULL);
	wsprintf(str, "¸®½ºÆ® ¹Ú½º = %x\r\n", code);
	lstrcat(Mes,str);
	code=SendDlgItemMessage(hDlg,IDC_CHECK1,WM_GETDLGCODE,0,NULL);
	wsprintf(str, "üũ ¹Ú½º = %x\r\n", code);
	lstrcat(Mes,str);
	code=SendDlgItemMessage(hDlg,IDC_RADIO1,WM_GETDLGCODE,0,NULL);
	wsprintf(str, "¶óµð¿À ¹öÆ° = %x\r\n", code);
	lstrcat(Mes,str);
	code=SendDlgItemMessage(hDlg,IDOK,WM_GETDLGCODE,0,NULL);
	wsprintf(str, "OK ¹öÆ° = %x\r\n", code);
	lstrcat(Mes,str);
	MessageBox(hDlg,Mes,"°á°ú",MB_OK);
}

BOOL CALLBACK MainDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	switch(iMessage) {
	case WM_INITDIALOG:
		hDlgMain = hDlg;
		return TRUE;
	case WM_LBUTTONDOWN:
		DlgCodeTest(hDlg);
		return TRUE;
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDOK:
			EndDialog(hDlg,IDOK);
			return TRUE;
		case IDCANCEL:
			EndDialog(hDlg,IDCANCEL);
			return TRUE;
		}
		return FALSE;
	}
	return FALSE;
}

¸¶¿ì½º ¿ÞÂÊ ¹öÆ°À» ´©¸£¸é DlgCodeTest ÇÔ¼ö¸¦ È£ÃâÇϸç ÀÌ ÇÔ¼ö¿¡¼­ °¢ ÄÁÆ®·Ñ¿¡°Ô WM_GETDLGCODE ¸Þ½ÃÁö¸¦ º¸³» ¾î¶² Á¾·ùÀÇ ÀÔ·ÂÀ» ¿øÇÏ´ÂÁö Áú¹®ÇÏ¿´´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

¿¡µðÆ® ¹Ú½º´Â WANTCHARS, HASSETSEL, WANTARROWS ÀÔ·ÂÀ» ó¸®ÇÑ´Ù. Áï ¹®ÀÚ ÀÔ·ÂÀ» ¹ÞÀ¸¸ç EM_SETSEL ¸Þ½ÃÁö¿¡ ¹ÝÀÀÇÏ°í Ä¿¼­ À̵¿Å°·Î ¾ÕµÚ·Î À̵¿ÇÑ´Ù. ¸ÖƼ¶óÀÎ ¿¡µðÆ®´Â ¿©±â¿¡ WANTALLKEYS ÀÔ·ÂÀ» Ãß°¡·Î ó¸®ÇÏ¿© EnterÅ°·Î °³ÇàÇÑ´Ù. Á» ´õ Á¤È®ÇÑ Äڵ尪Àº °¢ ÄÁÆ®·ÑÀÌ ½ÇÁ¦ ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§¿¡ µû¶ó ´Þ¶óÁø´Ù. ES_WANTRETURN ½ºÅ¸ÀÏÀÌ ÁöÁ¤µÇ¾î ÀÖ´Â °æ¿ì¿Í ±×·¸Áö ¾ÊÀº °æ¿ì ½ÇÁ¦ Enter ÀԷ¿¡ ´ëÇØ ´Ù¸£°Ô ¹ÝÀÀÇÒ °ÍÀÌ´Ù.

¿¹Á¦ 2

´ÙÀ½ ¿¹Á¦´Â ¿¡µðÆ® ÄÁÆ®·ÑÀ» ¼­ºê Ŭ·¡½ÌÇÏ¿© ÅÇ Å°¸¦ ÀԷ¹޵µ·Ï ÇÏ¿´´Ù.

#include 
#include "resource.h"

BOOL CALLBACK MainDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
HINSTANCE g_hInst;
HWND hDlgMain;

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
	,LPSTR lpszCmdParam,int nCmdShow)
{
	g_hInst=hInstance;
	
	DialogBox(g_hInst, MAKEINTRESOURCE(IDD_DIALOG1), HWND_DESKTOP, MainDlgProc);
	
	return 0;
}

WNDPROC OldEditProc;
LRESULT CALLBACK EditSubProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	switch (iMessage) {
	case WM_GETDLGCODE:
		return 0x8f;
	}
	return CallWindowProc(OldEditProc,hWnd,iMessage,wParam,lParam);
}

BOOL CALLBACK MainDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	switch(iMessage) {
	case WM_INITDIALOG:
		hDlgMain = hDlg;
		OldEditProc=(WNDPROC)SetWindowLong(GetDlgItem(hDlg,IDC_EDIT1),
			GWL_WNDPROC,(LONG)EditSubProc);
		return TRUE;
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDOK:
		case IDCANCEL:
			EndDialog(hDlg,IDOK);
			SetWindowLong(GetDlgItem(hDlg,IDC_EDIT1),
				GWL_WNDPROC,(LONG)OldEditProc);
			return TRUE;
		}
		return FALSE;
	}
	return FALSE;
}

ÅÇ Å°´Â ¿ø·¡ ´ëÈ­»óÀÚ¿¡¼­ ´ÙÀ½ ÄÁÆ®·Ñ·Î Æ÷Ä¿½º¸¦ ¿Å±â´Â Å°À̹ǷΠ¿¡µðÆ®°¡ ÅÇ Å° ÀÔ·ÂÀ» ¹ÞÁö ¸øÇÑ´Ù. ÇÏÁö¸¸ ¼­ºêŬ·¡½ÌÇÏ¿© WM_GETDLGCODE ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ DLGC_WANTTABÀ» ¸®ÅÏÇϸé ÅÇ Å°¸¦ ó¸®ÇÒ ¼ö ÀÖ´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

Ç÷§Æû

95ÀÌ»ó

ÂüÁ¶

 


written by http://www.winapi.co.kr