工控编程吧
标题:
上位机MFC在状态栏添加控件
[打印本页]
作者:
qq263946146
时间:
2019-9-18 09:49
标题:
上位机MFC在状态栏添加控件
(, 下载次数: 2)
上传
点击文件名下载附件
例如效果如上图。
通过工具条上的按钮,可以在状态栏上添加编辑框或隐藏它。
编辑框内输入内容也会显示在视窗内。
编程框为自己编写的集成类
class CMyEdit : public CEdit
通过调用此类的成员函数create可以创建与显示编辑框。
BOOL CMyEdit::Create(CStatusBar * parent, UINT id, DWORD style)
{
CRect r;
int i = parent->CommandToIndex(id);
parent->GetItemRect(i, &r);
parent->SetPaneText(i, "");
// If the pane was not visible, GetItemRect has returned a
// (0, 0, 0, 0) rectangle. Attempting to create the control
// using this rectangle creates it, possibly of zero size,
// at the left of the status bar. We correct this by
// forcing it to be off the visible right end of the status
// bar. If the programmer properly handles the parent frame's
// OnSize method, when the control becomes visible it will
// move to the correct location.
if(r.IsRectEmpty())
{ /* offscreen */
CRect r1;
parent->GetWindowRect(&r1); // get parent width
r.left = r1.right + 1;
r.top = r1.top;
r.right = r1.right + 2;
r.bottom = r1.bottom;
return FALSE;
} /* offscreen */
//////////////////////////////////////////////////////////////
BOOL result = CEdit::Create(style | WS_CHILD, r, parent, id);
if(!result)
return FALSE;
CFont * f = parent->GetFont();
SetFont(f);
return TRUE;
}
复制代码
void CMainFrame::OnAddEdit()
{
if(c_StatusEdit.m_hWnd == NULL)
{ /* create it */
c_StatusEdit.Create(&m_wndStatusBar, ID_EDIT, WS_VISIBLE | WS_BORDER);
} /* create it */
else
{ /* destroy it */
c_StatusEdit.DestroyWindow();
} /* destroy it */
}
复制代码
创建编辑框时传递的ID为ID_EDIT,可以关联此ID的消息函数
ON_EN_CHANGE(ID_EDIT, OnChangeEdit)
在编辑框内容发生变化时,就会调用函数OnChangeEdit。
void CMainFrame::OnChangeEdit()
{
CString s;
c_StatusEdit.GetWindowText(s);
CMyStatusView * view = (CMyStatusView *)GetActiveView();
if(view == NULL)
return;
view->AddString(s);
}
复制代码
(, 下载次数: 0)
上传
点击文件名下载附件
[MFC408]1[/MFC408]
[halcon]1[/halcon]
[weixinlianxi]1[/weixinlianxi]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4