ÀÀ¿ë ÇÁ·Î±×·¥ ¶§¶§·Î ÀûÀÀ ¶Ç´Â ó¸® ÁßÀÎ µ¥ÀÌÅÍÀÇ ÇöÀç »óÅ¿¡ µû¶ó ´ëÈ »óÀÚÀÇ ³»¿ëÀ» ¼öÁ¤ ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì¿¡´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ½ÇÇà ÆÄÀÏ¿¡ ¸®¼Ò½º·Î ¸ðµç °¡´ÉÇÑ ´ëÈ »óÀÚ ÅÛÇø´À» Á¦°ø ÇÏ´Â ¹æ¹ýÀº ½Ç¿ëÀû ¾Æ´Ï´Ù. ÇÏÁö¸¸ ¾î¶² »óȲ¿¡ ÀûÀÀ Çϱâ À§ÇØ ´õ ¸¹Àº À¯¿¬¼ºÀ» Á¦°ø ÇÏ ¸Þ¸ð¸®¿¡¼ ¼½Ä ÆÄÀÏÀ» ¸¸µé¾î ÀÀ¿ë ÇÁ·Î±×·¥.
´ÙÀ½ ¿¹Á¦¿¡¼´Â ÀÀ¿ë ÇÁ·Î±×·¥ ¸Þ¸ð¸® ¸Þ½ÃÁö¿Í È®ÀÎ ¹× µµ¿ò¸» ´ÜÃß°¡ ÀÖ´Â ¸ð´Þ ´ëÈ »óÀÚ¿¡ ¼½Ä ÆÄÀÏÀ» ¸¸µì´Ï´Ù.
´ëÈ ¼½Ä ÆÄÀÏ¿¡¼ ´ëÈ »óÀÚ¿Í ´ÜÃß°¡ Á¦¸ñ µî ¸ðµç ¹®ÀÚ ¹®ÀÚ¿À» À¯´ÏÄÚµå ¹®ÀÚ¿ À̾î¾ß ÇÕ´Ï´Ù. »ç¿ë ÇÏ ¿©ÀÌ ¿¹Á¦¸¦ Windows ¹× Windows NT MultiByteToWideChar À» Áö¿ø Çϱ⠶§¹®¿¡ ÀÌ·¯ÇÑ À¯´ÏÄÚµå ¹®ÀÚ¿À» »ý¼º ÇÏ MultiByteToWideChar ÇÔ¼ö
´ëÈ »óÀÚ ÅÛÇø´ DLGITEMTEMPLATE ±¸Á¶´Â DWORD °æ°è¿¡ Á¤·Ä µÇ¾î¾ß ÇÕ´Ï´Ù. ÀÌ ¿¹Á¦¿¡¼´Â ÀÌ·¯ÇÑ ±¸Á¶¸¦ Á¤·Ä ÇÏ·Á¸é ÀÔ·Â Æ÷ÀÎÅÍ¿Í DWORD (4 ¹ÙÀÌÆ®) °æ°è¿¡ Á¤·Ä µÇ´Â °¡Àå °¡±î¿î Æ÷ÀÎÅ͸¦ ¹Ýȯ ÇÏ´Â µµ¿ì¹Ì ·çƾÀ» »ç¿ë.
#define ID_HELP 150
#define ID_TEXT 200
LPWORD lpwAlign ( LPWORD lpIn)
{
ULONG ul;
ul = (ULONG) lpIn;
ul +=3;
ul >>=2;
ul <<=2;
return (LPWORD) ul;
}
LRESULT DisplayMyMessage(HINSTANCE hinst, HWND hwndOwner,
LPSTR lpszMessage)
{
HGLOBAL hgbl;
LPDLGTEMPLATE lpdt;
LPDLGITEMTEMPLATE lpdit;
LPWORD lpw;
LPWSTR lpwsz;
LRESULT ret;
int nchar;
hgbl = GlobalAlloc(GMEM_ZEROINIT, 1024);
if (!hgbl)
return -1;
lpdt = (LPDLGTEMPLATE)GlobalLock(hgbl);
// Define a dialog box.
lpdt->style = WS_POPUP | WS_BORDER | WS_SYSMENU
| DS_MODALFRAME | WS_CAPTION;
lpdt->cdit = 3; // number of controls
lpdt->x = 10; lpdt->y = 10;
lpdt->cx = 100; lpdt->cy = 100;
lpw = (LPWORD) (lpdt + 1);
*lpw++ = 0; // no menu
*lpw++ = 0; // predefined dialog box class (by default)
lpwsz = (LPWSTR) lpw;
nchar = 1+ MultiByteToWideChar (CP_ACP, 0, "My Dialog",
-1, lpwsz, 50);
lpw += nchar;
//-----------------------
// Define an OK button.
//-----------------------
lpw = lpwAlign (lpw); // align DLGITEMTEMPLATE on DWORD boundary
lpdit = (LPDLGITEMTEMPLATE) lpw;
lpdit->x = 10; lpdit->y = 70;
lpdit->cx = 80; lpdit->cy = 20;
lpdit->id = IDOK; // OK button identifier
lpdit->style = WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON;
lpw = (LPWORD) (lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0080; // button class
lpwsz = (LPWSTR) lpw;
nchar = 1+MultiByteToWideChar (CP_ACP, 0, "OK", -1, lpwsz, 50);
lpw += nchar;
lpw = lpwAlign (lpw); // align creation data on DWORD boundary
*lpw++ = 0; // no creation data
//-----------------------
// Define a Help button.
//-----------------------
lpw = lpwAlign (lpw); // align DLGITEMTEMPLATE on DWORD boundary
lpdit = (LPDLGITEMTEMPLATE) lpw;
lpdit->x = 55; lpdit->y = 10;
lpdit->cx = 40; lpdit->cy = 20;
lpdit->id = ID_HELP; // Help button identifier
lpdit->style = WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON;
lpw = (LPWORD) (lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0080; // button class atom
lpwsz = (LPWSTR) lpw;
nchar = 1+MultiByteToWideChar (CP_ACP, 0, "Help", -1, lpwsz, 50);
lpw += nchar;
lpw = lpwAlign (lpw); // align creation data on DWORD boundary
*lpw++ = 0; // no creation data
//-----------------------
// Define a static text control.
//-----------------------
lpw = lpwAlign (lpw); // align DLGITEMTEMPLATE on DWORD boundary
lpdit = (LPDLGITEMTEMPLATE) lpw;
lpdit->x = 10; lpdit->y = 10;
lpdit->cx = 40; lpdit->cy = 20;
lpdit->id = ID_TEXT; // text identifier
lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT;
lpw = (LPWORD) (lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0082; // static class
for (lpwsz = (LPWSTR)lpw;
*lpwsz++ = (WCHAR) *lpszMessage++;
);
lpw = (LPWORD)lpwsz;
lpw = lpwAlign (lpw); // align creation data on DWORD boundary
*lpw++ = 0; // no creation data
GlobalUnlock(hgbl);
ret = DialogBoxIndirect(hinst, (LPDLGTEMPLATE) hgbl,
hwndOwner, (DLGPROC) DialogProc);
GlobalFree(hgbl);
return ret;
}