📄 atlframe.h
字号:
}
delete [] m_pUIData;
}
}
// Check for disabled commands
bool UIGetBlockAccelerators() const
{
return m_bBlockAccelerators;
}
bool UISetBlockAccelerators(bool bBlock)
{
bool bOld = m_bBlockAccelerators;
m_bBlockAccelerators = bBlock;
return bOld;
}
// Add elements
BOOL UIAddMenuBar(HWND hWnd) // menu bar (main menu)
{
if(hWnd == NULL)
return FALSE;
_AtlUpdateUIElement e;
e.m_hWnd = hWnd;
e.m_wType = UPDUI_MENUBAR;
return m_UIElements.Add(e);
}
BOOL UIAddToolBar(HWND hWnd) // toolbar
{
if(hWnd == NULL)
return FALSE;
_AtlUpdateUIElement e;
e.m_hWnd = hWnd;
e.m_wType = UPDUI_TOOLBAR;
return m_UIElements.Add(e);
}
BOOL UIAddStatusBar(HWND hWnd) // status bar
{
if(hWnd == NULL)
return FALSE;
_AtlUpdateUIElement e;
e.m_hWnd = hWnd;
e.m_wType = UPDUI_STATUSBAR;
return m_UIElements.Add(e);
}
BOOL UIAddChildWindowContainer(HWND hWnd) // child window
{
if(hWnd == NULL)
return FALSE;
_AtlUpdateUIElement e;
e.m_hWnd = hWnd;
e.m_wType = UPDUI_CHILDWINDOW;
return m_UIElements.Add(e);
}
// Message map for popup menu updates and accelerator blocking
BEGIN_MSG_MAP(CUpdateUIBase)
MESSAGE_HANDLER(WM_INITMENUPOPUP, OnInitMenuPopup)
MESSAGE_HANDLER(WM_COMMAND, OnCommand)
END_MSG_MAP()
LRESULT OnInitMenuPopup(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
{
bHandled = FALSE;
HMENU hMenu = (HMENU)wParam;
if(hMenu == NULL)
return 1;
_AtlUpdateUIData* pUIData = m_pUIData;
if(pUIData == NULL)
return 1;
::SetMenuDefaultItem(hMenu, (UINT)-1, 0);
const _AtlUpdateUIMap* pMap = m_pUIMap;
while(pMap->m_nID != (WORD)-1)
{
if(pMap->m_wType & UPDUI_MENUPOPUP)
UIUpdateMenuBarElement(pMap->m_nID, pUIData, hMenu);
pMap++;
pUIData++;
}
return 0;
}
LRESULT OnCommand(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
{
bHandled = FALSE;
if(m_bBlockAccelerators && HIWORD(wParam) == 1) // accelerators only
{
int nID = LOWORD(wParam);
if((UIGetState(nID) & UPDUI_DISABLED) == UPDUI_DISABLED)
{
ATLTRACE2(atlTraceUI, 0, _T("CUpdateUIBase::OnCommand - blocked disabled command 0x%4.4X\n"), nID);
bHandled = TRUE; // eat the command, UI item is disabled
}
}
return 0;
}
// methods for setting UI element state
BOOL UIEnable(int nID, BOOL bEnable, BOOL bForceUpdate = FALSE)
{
const _AtlUpdateUIMap* pMap = m_pUIMap;
_AtlUpdateUIData* pUIData = m_pUIData;
if(pUIData == NULL)
return FALSE;
for( ; pMap->m_nID != (WORD)-1; pMap++, pUIData++)
{
if(nID == (int)pMap->m_nID)
{
if(bEnable)
{
if(pUIData->m_wState & UPDUI_DISABLED)
{
pUIData->m_wState |= pMap->m_wType;
pUIData->m_wState &= ~UPDUI_DISABLED;
}
}
else
{
if(!(pUIData->m_wState & UPDUI_DISABLED))
{
pUIData->m_wState |= pMap->m_wType;
pUIData->m_wState |= UPDUI_DISABLED;
}
}
if(bForceUpdate)
pUIData->m_wState |= pMap->m_wType;
if(pUIData->m_wState & pMap->m_wType)
m_wDirtyType |= pMap->m_wType;
break; // found
}
}
return TRUE;
}
BOOL UISetCheck(int nID, int nCheck, BOOL bForceUpdate = FALSE)
{
const _AtlUpdateUIMap* pMap = m_pUIMap;
_AtlUpdateUIData* pUIData = m_pUIData;
if(pUIData == NULL)
return FALSE;
for( ; pMap->m_nID != (WORD)-1; pMap++, pUIData++)
{
if(nID == (int)pMap->m_nID)
{
switch(nCheck)
{
case 0:
if((pUIData->m_wState & UPDUI_CHECKED) || (pUIData->m_wState & UPDUI_CHECKED2))
{
pUIData->m_wState |= pMap->m_wType;
pUIData->m_wState &= ~(UPDUI_CHECKED | UPDUI_CHECKED2);
}
break;
case 1:
if(!(pUIData->m_wState & UPDUI_CHECKED))
{
pUIData->m_wState |= pMap->m_wType;
pUIData->m_wState &= ~UPDUI_CHECKED2;
pUIData->m_wState |= UPDUI_CHECKED;
}
break;
case 2:
if(!(pUIData->m_wState & UPDUI_CHECKED2))
{
pUIData->m_wState |= pMap->m_wType;
pUIData->m_wState &= ~UPDUI_CHECKED;
pUIData->m_wState |= UPDUI_CHECKED2;
}
break;
}
if(bForceUpdate)
pUIData->m_wState |= pMap->m_wType;
if(pUIData->m_wState & pMap->m_wType)
m_wDirtyType |= pMap->m_wType;
break; // found
}
}
return TRUE;
}
BOOL UISetRadio(int nID, BOOL bRadio, BOOL bForceUpdate = FALSE)
{
const _AtlUpdateUIMap* pMap = m_pUIMap;
_AtlUpdateUIData* pUIData = m_pUIData;
if(pUIData == NULL)
return FALSE;
for( ; pMap->m_nID != (WORD)-1; pMap++, pUIData++)
{
if(nID == (int)pMap->m_nID)
{
if(bRadio)
{
if(!(pUIData->m_wState & UPDUI_RADIO))
{
pUIData->m_wState |= pMap->m_wType;
pUIData->m_wState |= UPDUI_RADIO;
}
}
else
{
if(pUIData->m_wState & UPDUI_RADIO)
{
pUIData->m_wState |= pMap->m_wType;
pUIData->m_wState &= ~UPDUI_RADIO;
}
}
if(bForceUpdate)
pUIData->m_wState |= pMap->m_wType;
if(pUIData->m_wState & pMap->m_wType)
m_wDirtyType |= pMap->m_wType;
break; // found
}
}
return TRUE;
}
BOOL UISetText(int nID, LPCTSTR lpstrText, BOOL bForceUpdate = FALSE)
{
const _AtlUpdateUIMap* pMap = m_pUIMap;
_AtlUpdateUIData* pUIData = m_pUIData;
if(pUIData == NULL)
return FALSE;
if(lpstrText == NULL)
lpstrText = _T("");
for( ; pMap->m_nID != (WORD)-1; pMap++, pUIData++)
{
if(nID == (int)pMap->m_nID)
{
if(pUIData->m_lpData == NULL || lstrcmp((LPTSTR)pUIData->m_lpData, lpstrText))
{
int nStrLen = lstrlen(lpstrText);
free(pUIData->m_lpData);
pUIData->m_lpData = NULL;
ATLTRY(pUIData->m_lpData = malloc((nStrLen + 1) * sizeof(TCHAR)));
if(pUIData->m_lpData == NULL)
{
ATLTRACE2(atlTraceUI, 0, _T("UISetText - malloc failed\n"));
break;
}
lstrcpy((LPTSTR)pUIData->m_lpData, lpstrText);
pUIData->m_wState |= (UPDUI_TEXT | pMap->m_wType);
}
if(bForceUpdate)
pUIData->m_wState |= (UPDUI_TEXT | pMap->m_wType);
if(pUIData->m_wState & pMap->m_wType)
m_wDirtyType |= pMap->m_wType;
break; // found
}
}
return TRUE;
}
BOOL UISetDefault(int nID, BOOL bDefault, BOOL bForceUpdate = FALSE)
{
const _AtlUpdateUIMap* pMap = m_pUIMap;
_AtlUpdateUIData* pUIData = m_pUIData;
if(pUIData == NULL)
return FALSE;
for( ; pMap->m_nID != (WORD)-1; pMap++, pUIData++)
{
if(nID == (int)pMap->m_nID)
{
if(bDefault)
{
if((pUIData->m_wState & UPDUI_DEFAULT) == 0)
{
pUIData->m_wState |= pMap->m_wType;
pUIData->m_wState |= UPDUI_DEFAULT;
}
}
else
{
if((pUIData->m_wState & UPDUI_DEFAULT) != 0)
{
pUIData->m_wState |= pMap->m_wType;
pUIData->m_wState &= ~UPDUI_DEFAULT;
}
}
if(bForceUpdate)
pUIData->m_wState |= pMap->m_wType;
if(pUIData->m_wState & pMap->m_wType)
m_wDirtyType |= pMap->m_wType;
break; // found
}
}
return TRUE;
}
// methods for complete state set/get
BOOL UISetState(int nID, DWORD dwState)
{
const _AtlUpdateUIMap* pMap = m_pUIMap;
_AtlUpdateUIData* pUIData = m_pUIData;
if(pUIData == NULL)
return FALSE;
for( ; pMap->m_nID != (WORD)-1; pMap++, pUIData++)
{
if(nID == (int)pMap->m_nID)
{
pUIData->m_wState = (WORD)(dwState | pMap->m_wType);
m_wDirtyType |= pMap->m_wType;
break; // found
}
}
return TRUE;
}
DWORD UIGetState(int nID)
{
const _AtlUpdateUIMap* pMap = m_pUIMap;
_AtlUpdateUIData* pUIData = m_pUIData;
if(pUIData == NULL)
return 0;
for( ; pMap->m_nID != (WORD)-1; pMap++, pUIData++)
{
if(nID == (int)pMap->m_nID)
return pUIData->m_wState;
}
return 0;
}
// methods for updating UI
BOOL UIUpdateMenuBar(BOOL bForceUpdate = FALSE, BOOL bMainMenu = FALSE)
{
if(!(m_wDirtyType & UPDUI_MENUBAR) && !bForceUpdate)
return TRUE;
const _AtlUpdateUIMap* pMap = m_pUIMap;
_AtlUpdateUIData* pUIData = m_pUIData;
if(pUIData == NULL)
return FALSE;
while(pMap->m_nID != (WORD)-1)
{
for(int i = 0; i < m_UIElements.GetSize(); i++)
{
if(m_UIElements[i].m_wType == UPDUI_MENUBAR)
{
HMENU hMenu = ::GetMenu(m_UIElements[i].m_hWnd);
if(hMenu != NULL && (pUIData->m_wState & UPDUI_MENUBAR) && (pMap->m_wType & UPDUI_MENUBAR))
UIUpdateMenuBarElement(pMap->m_nID, pUIData, hMenu);
}
if(bMainMenu)
::DrawMenuBar(m_UIElements[i].m_hWnd);
}
pMap++;
pUIData->m_wState &= ~UPDUI_MENUBAR;
if(pUIData->m_wState & UPDUI_TEXT)
{
free(pUIData->m_lpData);
pUIData->m_lpData = NULL;
pUIData->m_wState &= ~UPDUI_TEXT;
}
pUIData++;
}
m_wDirtyType &= ~UPDUI_MENUBAR;
return TRUE;
}
BOOL UIUpdateToolBar(BOOL bForceUpdate = FALSE)
{
if(!(m_wDirtyType & UPDUI_TOOLBAR) && !bForceUpdate)
return TRUE;
const _AtlUpdateUIMap* pMap = m_pUIMap;
_AtlUpdateUIData* pUIData = m_pUIData;
if(pUIData == NULL)
return FALSE;
while(pMap->m_nID != (WORD)-1)
{
for(int i = 0; i < m_UIElements.GetSize(); i++)
{
if(m_UIElements[i].m_wType == UPDUI_TOOLBAR)
{
if((pUIData->m_wState & UPDUI_TOOLBAR) && (pMap->m_wType & UPDUI_TOOLBAR))
UIUpdateToolBarElement(pMap->m_nID, pUIData, m_UIElements[i].m_hWnd);
}
}
pMap++;
pUIData->m_wState &= ~UPDUI_TOOLBAR;
pUIData++;
}
m_wDirtyType &= ~UPDUI_TOOLBAR;
return TRUE;
}
BOOL UIUpdateStatusBar(BOOL bForceUpdate = FALSE)
{
if(!(m_wDirtyType & UPDUI_STATUSBAR) && !bForceUpdate)
return TRUE;
const _AtlUpdateUIMap* pMap = m_pUIMap;
_AtlUpdateUIData* pUIData = m_pUIData;
if(pUIData == NULL)
return FALSE;
while(pMap->m_nID != (WORD)-1)
{
for(int i = 0; i < m_UIElements.GetSize(); i++)
{
if(m_UIElements[i].m_wType == UPDUI_STATUSBAR)
{
if((pUIData->m_wState & UPDUI_STATUSBAR) && (pMap->m_wType & UPDUI_STATUSBAR))
UIUpdateStatusBarElement(pMap->m_nID, pUIData, m_UIElements[i].m_hWnd);
}
}
pMap++;
pUIData->m_wState &= ~UPDUI_STATUSBAR;
if(pUIData->m_wState & UPDUI_TEXT)
{
free(pUIData->m_lpData);
pUIData->m_lpData = NULL;
pUIData->m_wState &= ~UPDUI_TEXT;
}
pUIData++;
}
m_wDirtyType &= ~UPDUI_STATUSBAR;
return TRUE;
}
BOOL UIUpdateChildWindows(BOOL bForceUpdate = FALSE)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -