ToolBar和StatusBar中控件的添加

清泛编译
3.ToolBar和StatusBar中控件的添加:

方法⑴.只能在ToolBar里创建控件:首先,在ToolBar中创建一个Button,其ID为ID_TOOL_COMBO(我们要将创建的控件放在该Button的位置上).
其 次,新创建一个类CMainToolBar,要从CToolBar继承(创建过程大概如下:选择工程/增加到工程/新的类;也可以选择工程的根,然后点击 右键,选择新的类;或者CTL+W,选择增加类/新的类 --- 然后在class type里选择Generic Class,在Name栏里输入新类的名字,Base class里输入CToolBar),创建成功后在该类里创建要增加的控件的对象,如:
CComboBox""m_wndMyCombo; 
CStatic""m_wndCategory, m_wndCategoryPath;
CButton""m_wndOpenButton;
Cedit"""m_wndEdit;
然后在构造函数里初始化如:
m_wndMyCombo.m_hWnd = NULL;
m_wndCategory.m_hWnd = NULL;
m_wndCategoryPath.m_hWnd = NULL;
m_wndOpenButton.m_hWnd = NULL;
m_wndEdit.m_hWnd = NULL;
接着在CMainframe的头文件里创建CMainToolBar的一个对象m_wndToolBar,最后在.cpp文件的OnCreate函数的最后实现如下:
int index = 0;
CRect rect;  // 可定义在头文件当中
// ComboBox
{
    //找到指定的工具项
    while(m_wndToolBar.GetItemID(index)!=ID_TOOL_COMBO)
        index++;
    //设置指定工具项的宽度并获取新的区域 120是宽度
    m_wndToolBar.SetButtonInfo(index, ID_TOOL_COMBO, TBBS_SEPARATOR, 120);
    m_wndToolBar.GetItemRect(index, &rect);

    //设置位置
    rect.top+=1;
    rect.bottom += 200;

    // 创建并显示控件
    if(!m_wndToolBar.m_wndMyCombo.Create(WS_CHILD|WS_VISIBLE| CBS_AUTOHSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS , rect, &m_wndToolBar, ID_TOOL_COMBO))
    { 
        TRACE0("Failed to create combo-box\n");
        return FALSE;
    }
    m_wndToolBar.m_wndMyCombo.ShowWindow(SW_SHOW);

    //填充内容
    m_wndToolBar.m_wndMyCombo.AddString("25%");
    m_wndToolBar.m_wndMyCombo.AddString("50%");
    m_wndToolBar.m_wndMyCombo.AddString("75%");

    //选择默认项
    m_wndToolBar.m_wndMyCombo.SetCurSel(0);

    //获取到内容并MSGBOX显示出来
    CString strContent;
    m_wndToolBar.m_wndMyCombo.GetWindowText(strContent);

    index = 0;
}
其他控件都类似创建(只需要注意一下各自的Create函数的参数即可)。
方 法⑵.这种方法创建不太容易控制:直接在CMainframe的头文件中创建要增加的控件的对象,如CButton"的对象 m_wndAboutButton,然后创建CToolBar或者CstatusBar的对象,如:CstatusBar的对象 _wndStatusBar;再增加几个函数如下:
Protected:
virtual void RecalcLayout(BOOL bNotify = TRUE);
"afx_msg void CMainFrame::OnViewStatusBar();
接着在.cpp文件中将StatusBar的ID和OnViewStatusBar 函数绑定在一起,如下所示:BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
"  // {{AFX_MSG_MAP(CMainFrame)
"  ON_COMMAND(ID_VIEW_STATUS_BAR, OnViewStatusBar)
"  ON_WM_CREATE()
"  // }}AFX_MSG_MAP
END_MESSAGE_MAP()
然后Create函数的最后(返回值之前)实现如下代码:
CRect rc;
"VERIFY(m_wndAboutButton.Create(_T("MyAbout"),
""  WS_VISIBLE,rc,this,ID_APP_ABOUT));

"// TODO: Remove this if you don't want tool tips or a resizeable toolbar
"m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
"CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
再在RecalcLayout函数里实现:
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_wndAboutButton.SetWindowPos(NULL,rc.left,rc.top,rc.Width(),rc.Height(),
"""SWP_NOZORDER);
"}
最后在OnViewStatusBar()里实现:
BOOL bShow = m_wndStatusBar.GetStyle() & WS_VISIBLE;
"m_wndAboutButton.SetWindowPos(NULL, 0, 0, 0, 0,
SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|
(bShow ? SWP_SHOWWINDOW : SWP_HIDEWINDOW));
ToolBar中的创建与此相同,只需更改一下句柄即可。

本文导航

MFC 总结 技巧

分享到:
评论加载中,请稍后...
App Inventor 2 中文网,少儿编程首选平台!
回到顶部