现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

VC++界面编程总结(二)

2012-08-09 02:41 工业·编程 ⁄ 共 2031字 ⁄ 字号 暂无评论

六、给没有工具栏的窗口添加工具栏:

在资源管理器中编辑工具栏,并将其属性改为IDR_MAINFRAME,然后在MainFrm.h中声明:
CToolBar m_wndToolBar;
在MainFrm.cpp中添加:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
m_wndToolBar.Create(this);
m_wndToolBar.LoadToolBar(IDR_MAINFRAME);
……;

停靠工具栏:在刚才添加的后面加入下面代码:
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle()|CBRS_TOOLTIPS|CBRS_SIZE_DYNAMIC);
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);//控制是否开启任意停靠
完善一下功能:
在菜单中添加一项“工具栏”,ID设为ID_VIEW_TOOLBAR,一切OK,试试吧!

七、创建分隔窗口:

只有框架类可以创建分隔,分隔可以嵌套。
在.h文件中声明 CSplitterWnd m_wndSplitter;并且包含COneView.h(新建视图类)和CWinFrame.h(新建框架类)文件;
然后在.cpp文件中加入:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if(!m_wndSplitter.CreateStatic(this,1,2))
    return FALSE;
if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(COneView),CSize(240,420),pContext))
    return FALSE;
if(!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CWinFrame),CSize(300,500),pContext))
    return FALSE;
return TRUE;
}
当用户创建好分割窗口后,有时并不希望通过拖动切分条来调节窗口的大小。这时就必须锁定切分条。锁定切分条的最简单的方法莫过于不让 CSplitterWnd来处理WM_LBUTTONDOWN,WM_MOUSEMOVE,WM_SETCURSOR消息,而是将这些消息交给CWnd窗口进行处理,从而屏蔽掉这些消息。拿WM_LBUTTONDOWN处理过程来说。修改为如下:
void CXXSplitterWnd::OnLButtonDown(UINT nFlags,CPoint point)
{
  CWnd::OnLButtonDown(nFlags,point);
}
其余的处理方法类似。

八、“打开”按钮的设置:

    用类向导创建该按钮的click函数,选择默认值OnOpen,加入以下代码:
void CYourDlg::OnOpen()
{
char szFileFilter[]=
       "BIN File(*.bin)|*.bin|"
       "All File(*.*)|*.*||";//文件类型过滤
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
/* CFileDialog dlg(FALSE);
   dlg.m_ofn .lpstrFilter =_T("文本文件(*.txt)*.txt所有文件(*.*)*.*");
   dlg.m_ofn.lpstrDefExt=_T("txt"); */
if(dlg.DoModal()==IDOK)
{
  m_path = dlg.GetPathName();//将显示路径的Edit控件命名为m_path,并增加CString变量m_path
  UpdateData(FALSE); 

}

九、窗口居中:
在初始化(OnInit)函数中增加:CenterWindow();即可

十、对话框加状态条:

    UINT indicators[]={ID_INITMESSAGE,ID_SEPARATOR,ID_TIMEMESSAGE,ID_PROGRESS};
    m_statusbar.CreateEx(this,0,WS_CHILD | WS_VISIBLE | CBRS_BOTTOM);
    m_statusbar.SetIndicators(indicators,4);
    m_statusbar.ShowWindow (SW_SHOW);
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

给我留言

留言无头像?