前言:
最近做一个项目需要在状态栏中添加按钮,但是找遍全网也很难找到有用的信息,因此写下这篇文章,希望能对需要的朋友有帮助
内容:
首先,在CMainFrame头文件中添加:
CMFCButton m_wndButton; //状态栏按钮
其次在资源视图中String Table中添加按钮的ID(自己定义)
然后在CMainFrame源文件的OnCreate函数中添加代码:
if (!m_wndStatusBar.Create(this))
{
TRACE0("未能创建状态栏\n");
return -1; // 未能创建
}
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
ModifyStyle(0, WS_THICKFRAME);
CRect rc;
//其中ID_STATUS是按钮的ID
VERIFY(m_wndButton.Create("按钮", WS_VISIBLE | BS_FLAT, rc, this, ID_STATUS));
//如下代码改变按钮的字体大小和字体类型,可加可不加
CFont font;
font.CreatePointFont(90, "宋体");
m_wndButton.SetFont(&font, true);
在CMainFrame中重写函数
void CMainFrame::RecalcLayout(BOOL bNotify)
{
// TODO: 在此添加专用代码和/或调用基类
CMDIFrameWndEx::RecalcLayout(bNotify);
CRect rc;
if (m_wndStatusBar.m_hWnd)
{
m_wndStatusBar.GetWindowRect(&rc);
ScreenToClient(&rc);
rc.right -= 50;
m_wndStatusBar.SetWindowPos(NULL, rc.left, rc.top, rc.Width(), rc.Height(),SWP_NOZORDER);
// 状态栏上按钮的位置大小
rc.left = rc.right;
rc.right += 50;
m_wndButton.SetWindowPos(NULL, rc.left, rc.top, rc.Width(), rc.Height(),SWP_NOZORDER);
}
}
最终成果:
要使按钮点击启作用,就要为按钮的ID绑定消息事件
在XXApp函数中写如下代码:
//在XXXApp.h文件中写
afx_msg void OnStatus();
//在XXXApp.cpp文件中写
BEGIN_MESSAGE_MAP(XXXApp, CWinAppEx)
...
...
ON_COMMAND(ID_STATUS, &XXXApp::OnStatus)
END_MESSAGE_MAP()
void XXXApp::OnStatus()
{
//写你要进行的操作
//或者弹出一个对话框也行
MessageBox(NULL, _T("状态栏窗口被点击了!"), _T("Message"), MB_OK); //弹出对话框
}
效果图:
结语 :
好了,我的文章到此结束了,希望能够帮助到你们!第一次写文章,希望大家能给个赞赞!