vc++经典技巧总结
分类: VC++编程技术 2008-12-31 12:23 36341人阅读 评论(2) 收藏 举报
1.\属性页的添加:
创建对话框的类,该类要从CpropertyPage继承;然后在要添加该对话框为属性页的类(头文件)里创建CpropertySheet类的一个对象m_tabsheet和新创建的对话框类的对象m_skatch;最后,在.cpp文件里的OnInitDialog()之类的函数里实现如下代码: m_tabsheet.Create(this, WS_CHILD | WS_VISIBLE, 0); \使选项卡的按钮在下面 \
\显示选项卡 //加入标签,标签名由各个子对话框的标题栏决定 \\用Create来创建一个属性页
\\
RECT rect;
\\\\
\调整属性页的大小和位置
\属性页的添加完成。如果要添加多个属性页,则只需要增加多个对象,如下:m_tabsheet.AddPage(&m_skatch1); m_tabsheet.AddPage(&m_skatch2); . . . . . .
2.\中标题栏(Column)的添加:
创建一个List Control,其ID为IDC_LIST,在其Styles属性项下的View项里选择Report、Align项里选择Top、Sort项里选择None.
然后在该List所在对话框的类(头文件)里创建ClistCtrl的一个对象m_list然后在.cpp文件的OnInitDialog()之类的函数里实现如下代码:
CString strname[3]; strname[0]=\strname[1]=\strname[2]=\for(int i=0;i<3;i++) {
m_List.InsertColumn(i,strname[i],LVCFMT_LEFT,130); }
在这之前也要将List Control的ID与ClistCtrl的对象m_list在DoDataExchange(CDataExchange* pDX)函数里绑定,如下: DDX_Control(pDX, IDC_LIST, m_List);
3.\和StatusBar中控件的添加:
方法⑴.只能在ToolBar里创建控件:首先,在ToolBar中创建一个Button,其ID为ID_TOOL_COMBO(我们要将创建的控件放在该Button的位置上).
其次,新创建一个类CMainToolBar,要从CToolBar继承(创建过程大概如下:选择工程/增加到工程/新的类;也可以选择工程的根,然后点击右键,选择新的类;或者CTL+W,选择增加类/新的类 --- 然后在class type里选择Generic Class,在Name栏里输入新类的名字,Base class里输入CToolBar),创建成功后在该类里创建要增加的控件的对象,如: CComboBox\
CStatic\CButton\Cedit\
然后在构造函数里初始化如: 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函数的最后实现如下: \
\ // 可定义在头文件当中 \ ComboBox
\
\找到指定的工具项
\\
\设置指定工具项的宽度并获取新的区域 120是宽度
\\\
\设置位置 \\\
\创建并显示控件
\CROLL|
\MBO)) \
\\\
\\
\填充内容\
\\\\
\选择默认项
\\
\获取到内容并MSGBOX显示出来 \
\
\\
其他控件都类似创建(只需要注意一下各自的Create函数的参数即可)。
方法⑵.这种方法创建不太容易控制:直接在CMainframe的头文件中创建要增加的控件的对象,如CButton\的对象m_wndAboutButton,然后创建CToolBar或者CstatusBar的对象,如:CstatusBar的对象_wndStatusBar;再增加几个函数如下: Protected:
virtual void RecalcLayout(BOOL bNotify = TRUE); \
接着在.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;
\\ WS_VISIBLE,rc,this,ID_APP_ABOUT));
\\\再在RecalcLayout函数里实现: CRect rc;
if (m_wndStatusBar.m_hWnd) {
\\\
\\
\
\
\\\
最后在OnViewStatusBar()里实现:
BOOL bShow = m_wndStatusBar.GetStyle() & WS_VISIBLE; \
SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE| (bShow ? SWP_SHOWWINDOW : SWP_HIDEWINDOW)); ToolBar中的创建与此相同,只需更改一下句柄即可。
4.\通过Control创建的控件,对其属性的动态控制:
在对话框类的头文件里创建所要改变属性的控件的对象,如要改变一个Button(其ID为IDC_MyButton)的属性,则需创建Cbutton的对象m_button。然后在.cpp中的DoDataExchange函数里将Button的ID和创建的对象绑定在一起: //{{AFX_DATA_MAP(CPrintDlg)
\\\
然后可以在该函数的最后进行初始化: \
到这里已经实现了改变属性。如果要动态改变其属性,可如下实现(通过两个Button的点击改变起属性):
// RadioAll Button的点击响应函数 void CPrintDlg::OnRadioAll() {
\\}
// RadioSelect Button的点击响应函数 void CPrintDlg::OnRadioSelect() {
\