单文档MFC程序中关于状态栏的一些修改

1:SID下令状态栏含有一个按钮2:SID下在状态栏划出一个红色的椭圆希望有详细步骤~谢谢了!... 1:SID下令状态栏含有一个按钮
2:SID下在状态栏划出一个红色的椭圆
希望有详细步骤~谢谢了!
展开
 我来答
百度网友87b4f1c69
2010-11-08 · TA获得超过1218个赞
知道小有建树答主
回答量:760
采纳率:0%
帮助的人:979万
展开全部
实现这两个功能一般有两个方法,一个就是在CStatusBar的派生类中实现,另一种不采用派生类,直接在状态栏的窗口中实现,我说的方法是第二种:

(1)在String Table中新建字符串:ID_INDICATOR_BUTTON、ID_INDICATOR_PAINT,一个是按钮的,一个是绘图的;
(2)在indicators[]中增加该指示器:
static UINT indicators[] =
{
ID_SEPARATOR, // 状态行指示器
ID_INDICATOR_BUTTON,
ID_INDICATOR_PAINT,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
(2)在CMainFrame中定义按钮对象:CButton cBtn;
(3)在OnCreate中添加按钮创建代码:
//获取工具栏BUTTON大小
CRect rect;
m_wndStatusBar.GetItemRect(m_wndStatusBar.CommandToIndex(ID_INDICATOR_BUTTON), &rect);
m_cBtn.Create(L"测试",WS_VISIBLE|WS_CHILD,rect,&m_wndStatusBar,ID_BUTTON_TEST);
(4)增加椭圆绘制函数StatusDraw():
void CMainFrame::StatusDraw()
{
CDC *pDC = m_wndStatusBar.GetDC();
CRect rect;
m_wndStatusBar.GetItemRect(m_wndStatusBar.CommandToIndex(ID_INDICATOR_PAINT),&rect);
m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(ID_INDICATOR_PAINT),L"");
CPen pen(PS_SOLID,1,RGB(255,0,0));
pDC->SelectObject(&pen);
pDC->Ellipse(&rect);
}
(5)添加OnSize消息处理函数,然后:
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);

// TODO: 在此处添加消息处理程序代码
if(m_cBtn.GetSafeHwnd()!=NULL)
{
CRect rect;
m_wndStatusBar.GetItemRect(m_wndStatusBar.CommandToIndex(ID_INDICATOR_BUTTON), &rect);
m_cBtn.MoveWindow(rect);

StatusDrawLine();
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式