¸ð´ú ´ÙÀ̾ó·Î±×¿¡¼­µµ ¸ð´Þ¸®½º ´ÙÀ̾ó·Î±×¿¡¼­µµ  pop-up menu ¾ÆÀÌÅÛÀÇ UI°»½Å Çڵ鷯¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

¡¡¾Æ·¡¿¡ ³ªÅ¸³»´Â °ÍÀº  Áö±Ý±îÁö ÀÛ¼ºÇÑ ´ÙÀ̾ó·Î±×¿¡ pop-up menu ¾ÆÀÌÅÛÀÇ UI°»½Å Çڵ鷯¸¦ Ãß°¡ÇÏ´Â ¼ø¼­ÀÔ´Ï´Ù. ¿©±â¿¡¼­´Â  ´ÙÀ̾ó·Î±×¿¡ µµ±¸¸ðÀ½À» Ãß°¡ÇØ [Ç×»ó ¾Õ¿¡ Ç¥½Ã]¶ó°í ÇÏ´Â ¸Þ´º ¾ÆÀÌÅÛÀ» ÀÛ¼ºÇØ ¸Þ´º ¾ÆÀÌÅÛÀÌ ¼±ÅÃµÉ ¶§¸¶´Ù UI °»½Å Çڵ鷯¿¡ ÀÇÇØ ¸Þ´º ¾ÆÀÌÅÛÀÇ Ã¼Å© ¸¶Å©ÀÇ ºÎ°¡¿Í ¼Ò°Å¸¦ ¹Ýº¹Çϵµ·Ï ÇÕ´Ï´Ù. µ¡ºÙ¿© ¿©±â °¡¸®Å°´Â ¼ø¼­´Â ¸ð´ú ´ÙÀ̾ó·Î±× , ¸ð´Þ¸®½º ´ÙÀ̾ó·Î±×ÀÇ ¾î´À ÂÊ¿¡µµ µé¾î ¸ÂÀ¾´Ï´Ù.


¡¡¿ì¼±Àº ÇÁ·ÎÁ§Æ®¿¡ IDR_MENU_MAIN¶ó°í ÇÏ´ÂIDÀÇ ¸Þ´º ÀÚ¿øÀ» Ãß°¡ÇØ  [Ç×»ó ¾Õ¿¡ Ç¥½Ã]¶ó°í ÇÏ´Â ¸Þ´º ¾ÆÀÌÅÛÀ» ÀÛ¼ºÇØ °Å±â¿¡ID_MENUITEM_TOPMOST¶ó°í ÇÏ´ÂID¸¦ ¼³Á¤ÇÕ´Ï´Ù. ´ÙÀ½¿¡  ´ÙÀ̾ó·Î±×ÀÇ ÇÁ·ÎÆÛƼ¸¦ ¿­¾î  ¸Þ´º·Î¼­IDR_MENU_MAIN¸¦ ÁöÁ¤ÇÕ´Ï´Ù. À̰ÍÀ¸·Î ´ÙÀ̾ó·Î±×¿¡ ¸Þ´º°¡ Ãß°¡µË´Ï´Ù.



¡¡´ÙÀ½¿¡ UI°»½Å Çڵ鷯¸¦ »ç¿ëÇϱâ À§Çؼ­´ÂCUpdateUIŬ·¡½º°¡ ÇÊ¿äÇÏ°Ô µÇ±â ¶§¹®¿¡  atlframe.hÇì´õ¸¦ ÀÎŬ·çµå ÇÕ´Ï´Ù.

// stdafx.h³»

#include <atlbase.h>

#include <atlapp.h>

extern CAppModule _Module;

#include <atlwin.h>

 

#include <atlcrack.h>

#include <atlmisc.h>

#include <atlframe.h>

                      


¡¡´ÙÀ½¿¡ CUpdateUI  Å¬·¡½º¸¦ ´ÙÀ̾ó·Î±× Ŭ·¡½ºÀÎ CMainDlgŬ·¡½ºÀÇ base class·Î ÇÕ´Ï´Ù.

class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>

                      


¡¡CMainDlg Ŭ·¡½º ³»¿¡¼­´Â UI°»½Å Çڵ鷯 ¸Ê¿¡ID_MENUITEM_TOPMOST ¿ë¹«ÀÇ ¿£Æ®¸®¸¦ Ãß°¡ÇÕ´Ï´Ù. ÇÑÃþ ´õ ¸Þ¼¼Áö ¸Ê¿¡´ÂID_MENUITEM_TOPMOST ¿ë¹«ÀÇ Ä¿¸àµå Çڵ鷯 ¿£Æ®¸®¿Í  CUpdateUIŬ·¡½º¿¡ÀÇ Ã¼ÀÎÀ» Ãß°¡ÇÕ´Ï´Ù.

class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>

{

public:

    enum { IDD = IDD_DIALOG1 };

 

    // UI°»½Å Çڵ鷯 ¸Ê

    BEGIN_UPDATE_UI_MAP(CMainDlg)

        UPDATE_ELEMENT(ID_MENUITEM_TOPMOST, UPDUI_MENUPOPUP)

    END_UPDATE_UI_MAP()

 

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP_EX(CMainDlg)

        MSG_WM_INITDIALOG(OnInitDialog)

        COMMAND_ID_HANDLER_EX(ID_MENUITEM_TOPMOST, OnMenuTopmost)  // [Ç×»ó ¾Õ¿¡ Ç¥½Ã]

        ...

        ...

        CHAIN_MSG_MAP(CUpdateUI<CMainDlg>)  // CUpdateUIŬ·¡½º¿¡ÀÇ Ã¼ÀÎ

    END_MSG_MAP()

 

    ...

                      


¡¡´ÙÀ½¿¡ CMainDlg Ŭ·¡½º¿¡ID_MENUITEM_TOPMOSTÀÇ Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù.

class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>

{

    ...

    ...

   

    void OnMenuTopmost(UINT uNotifyCode, int nID, HWND hWndCtl){

        bool bTopmost = !(UIGetState(nID) & UPDUI_CHECKED);

        SetWindowPos(bTopmost ? HWND_TOPMOST : HWND_NOTOPMOST,

            0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);

        UISetCheck(nID, bTopmost);

    }

 

    ...

                      


À̰ÍÀ¸·Î  pop-up menu ¾ÆÀÌÅÛ¿ëÀÇ UI°»½Å Çڵ鷯°¡ ¿òÁ÷ÀÌ°Ô µË´Ï´Ù. ¿ì¼±  ´ÙÀ̾ó·Î±×¿¡ ¸Þ´º¸¦ Ãß°¡ÇÏ´Â °ÍÀ¸·Î  ¸Þ´º°¡ Ç¥½ÃµÉ  ¶§ WM_INITMENUPOPUP ¸Þ¼¼Áö°¡ ´ÙÀ̾ó·Î±×¿¡ º¸³»Á® ¿À°Ô µË´Ï´Ù.  CMainDlg Ŭ·¡½ºÀÇ ¸Þ½ÃÁö  ¸Ê¿¡¼­´Â WM_INITMENUPOPUP ¸Þ¼¼Áö¸¦ ó¸®ÇÏÁö ¾Ê±â ¶§¹®¿¡  ÀÌ ¸Þ¼¼Áö´Â üÀÎóÀÇ CUpdateUIŬ·¡½º¿¡  º¸³»Áý´Ï´Ù.  CUpdateUI Ŭ·¡½ºÀÇ base class ÀÌ·Á¸é CUpdateUIBase  WM_INITMENUPOPUP ¸Þ¼¼Áö Çڵ鷯°¡ ÁغñµÇ¾î ÀÖ¾î pop-up menu ¾ÆÀÌÅÛÀÌ °»½ÅµË´Ï´Ù.