SDI 中的StatusBar 状态指示器()
来源:互联网 发布:mc网络歌手招聘 编辑:程序博客网 时间:2024/05/29 09:18
SDI单文档中
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
..............
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
...........
}
上述代码产生一个状态条,并设定指示器的ID,
...........
BOOL CStatusBar::SetIndicators(const UINT* lpIDArray, int nIDCount)
{
ASSERT_VALID(this);
ASSERT(nIDCount >= 1); // must be at least one of them
ASSERT(lpIDArray == NULL ||
AfxIsValidAddress(lpIDArray, sizeof(UINT) * nIDCount, FALSE));
ASSERT(::IsWindow(m_hWnd));
// first allocate array for panes and copy initial data
if (!AllocElements(nIDCount, sizeof(AFX_STATUSPANE)))
return FALSE;
ASSERT(nIDCount == m_nCount);
// copy initial data from indicator array
BOOL bResult = TRUE;
if (lpIDArray != NULL)
{
HFONT hFont = (HFONT)SendMessage(WM_GETFONT);
CClientDC dcScreen(NULL);
HGDIOBJ hOldFont = NULL;
if (hFont != NULL)
hOldFont = dcScreen.SelectObject(hFont);
AFX_STATUSPANE* pSBP = _GetPanePtr(0);
for (int i = 0; i < nIDCount; i++)
{
pSBP->nID = *lpIDArray++;
pSBP->nFlags |= SBPF_UPDATE;
if (pSBP->nID != 0)
{
if (!pSBP->strText.LoadString(pSBP->nID))
{
TRACE1("Warning: failed to load indicator string 0x%04X.\n",
pSBP->nID);
bResult = FALSE;
break;
}
pSBP->cxText = dcScreen.GetTextExtent(pSBP->strText).cx;
ASSERT(pSBP->cxText >= 0);
if (!SetPaneText(i, pSBP->strText, FALSE))
{
bResult = FALSE;
break;
}
}
else
{
// no indicator (must access via index)
// default to 1/4 the screen width (first pane is stretchy)
pSBP->cxText = ::GetSystemMetrics(SM_CXSCREEN)/4;
if (i == 0)
pSBP->nStyle |= (SBPS_STRETCH | SBPS_NOBORDERS);
}
++pSBP;
}
if (hOldFont != NULL)
dcScreen.SelectObject(hOldFont);
}
UpdateAllPanes(TRUE, TRUE);
return bResult;
}
//给状态栏设定相应的文本.和ID
.....................
在WINFRM.CPP文件中 可以看到这
ON_UPDATE_COMMAND_UI(ID_INDICATOR_CAPS, OnUpdateKeyIndicator)
ON_UPDATE_COMMAND_UI(ID_INDICATOR_NUM, OnUpdateKeyIndicator)
ON_UPDATE_COMMAND_UI(ID_INDICATOR_SCRL, OnUpdateKeyIndicator)
ON_UPDATE_COMMAND_UI(ID_INDICATOR_KANA, OnUpdateKeyIndicator)
再看其响应函数
void CFrameWnd::OnUpdateKeyIndicator(CCmdUI* pCmdUI)
{
UINT nVK;
UINT flag = 0x0001;
switch (pCmdUI->m_nID)
{
case ID_INDICATOR_CAPS:
nVK = VK_CAPITAL;
break;
case ID_INDICATOR_NUM:
nVK = VK_NUMLOCK;
break;
case ID_INDICATOR_SCRL:
nVK = VK_SCROLL;
break;
case ID_INDICATOR_KANA:
nVK = VK_KANA;
// WINBUG: Special case for Windows 3.x. The wrong bit was toggled
// in those systems so this must be special cased. This is fixed
// on systems whose version is 4.x or greater.
if (!afxData.bWin4)
flag = 0x8000;
break;
default:
TRACE1("Warning: OnUpdateKeyIndicator - unknown indicator 0x%04X.\n",
pCmdUI->m_nID);
pCmdUI->ContinueRouting();
return; // not for us
}
pCmdUI->Enable(::GetKeyState(nVK) & flag);
// enable static text based on toggled key state
ASSERT(pCmdUI->m_bEnableChanged);
}
- SDI 中的StatusBar 状态指示器()
- SDI中的窗口切分
- iOS切换Statusbar黑白状态
- 关于iOS7里导航控制器中的子控制器设置StatusBar状态失效的问题
- C#中的索引指示器
- Shell中的进度指示器
- 2.Qt 中的statusBar
- SDI
- PS 键 电话状态及指示器 API
- DFCircleActivityIndicator DF圆形活动状态指示器
- Symbian 面板之状态面板(StatusBar)(ZT)
- 不同statusbar状态下的页面转换
- [Swift 3.0] 实时动态修改StatusBar状态
- shell脚本中的进度指示器
- delph7中的状态栏学习statusbar
- qt中的状态栏statusbar()
- 指示器
- 指示器
- Yarn目录文件介绍
- VSTS 工作项编辑注意事项
- js跨域 -- 使用form表单 + 隐藏的iframe
- MongoDB,exception,inline
- 浮点数比较
- SDI 中的StatusBar 状态指示器()
- jsp页面中的代码执行加载顺序
- Java 线程池的原理与实现
- C/C++ 误区:fflush(stdin)
- 天地图
- C# Heap(ing) Vs Stack(ing) in .NET: Part III
- C++:最小公倍数&最大公约数&润年判别
- MINA2.0用户手册中文版--第七章 MINA中的处理程序Handler
- hive优化之------控制hive任务中的map数和reduce数