上位机MFC在状态栏添加控件
例如效果如上图。
通过工具条上的按钮,可以在状态栏上添加编辑框或隐藏它。
编辑框内输入内容也会显示在视窗内。
编程框为自己编写的集成类
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);
- }
复制代码
上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例 经历1年的编程与录制点击进入查看
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|