¸Þ¸ð¸®¿¡¼­ ÅÛÇø´ ¸¸µé±â

ÀÀ¿ë ÇÁ·Î±×·¥ ¶§¶§·Î ÀûÀÀ ¶Ç´Â ó¸® ÁßÀÎ µ¥ÀÌÅÍÀÇ ÇöÀç »óÅ¿¡ µû¶ó ´ëÈ­ »óÀÚÀÇ ³»¿ëÀ» ¼öÁ¤ ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì¿¡´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ½ÇÇà ÆÄÀÏ¿¡ ¸®¼Ò½º·Î ¸ðµç °¡´ÉÇÑ ´ëÈ­ »óÀÚ ÅÛÇø´À» Á¦°ø ÇÏ´Â ¹æ¹ýÀº ½Ç¿ëÀû ¾Æ´Ï´Ù. ÇÏÁö¸¸ ¾î¶² »óȲ¿¡ ÀûÀÀ Çϱâ À§ÇØ ´õ ¸¹Àº À¯¿¬¼ºÀ» Á¦°ø ÇÏ ¸Þ¸ð¸®¿¡¼­ ¼­½Ä ÆÄÀÏÀ» ¸¸µé¾î ÀÀ¿ë ÇÁ·Î±×·¥.

´ÙÀ½ ¿¹Á¦¿¡¼­´Â ÀÀ¿ë ÇÁ·Î±×·¥ ¸Þ¸ð¸® ¸Þ½ÃÁö¿Í È®ÀÎ ¹× µµ¿ò¸» ´ÜÃß°¡ ÀÖ´Â ¸ð´Þ ´ëÈ­ »óÀÚ¿¡ ¼­½Ä ÆÄÀÏÀ» ¸¸µì´Ï´Ù.

´ëÈ­ ¼­½Ä ÆÄÀÏ¿¡¼­ ´ëÈ­ »óÀÚ¿Í ´ÜÃß°¡ Á¦¸ñ µî ¸ðµç ¹®ÀÚ ¹®ÀÚ¿­À» À¯´ÏÄÚµå ¹®ÀÚ¿­ À̾î¾ß ÇÕ´Ï´Ù. »ç¿ë ÇÏ ¿©ÀÌ ¿¹Á¦¸¦ 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; 
}
 

 

Index