MFC-两个基本控件:TreeControl以及RichControl
来源:互联网 发布:c语言伪代码编写 编辑:程序博客网 时间:2024/05/18 22:12
1.MFC中两个基本的控件介绍
1. TreeControl
功能演示如下:
本示例主要实现了增删改的功能,首先我们看增加的功能,代码如下所示:
void CTreeCtrlDemoDlg::OnBnClickedBtnAdd(){ // TODO: 在此添加控件通知处理程序代码 CString strInput; GetDlgItemTextW(IDC_EDIT_INPUT, strInput); HTREEITEM hItem = m_tree.GetSelectedItem(); if (!hItem) hItem = TVI_ROOT; TVINSERTSTRUCTW ts = { 0 }; ts.hParent = hItem; ts.itemex.pszText = (LPWSTR)(LPCTSTR)strInput; // 转换 // Long Point Width String // Long Point Const Type String ts.item.mask = TVIF_TEXT; ts.hInsertAfter = TVI_LAST; HTREEITEM hNewItem = m_tree.InsertItem(&ts); m_tree.SelectItem(hNewItem); m_tree.EnsureVisible(hNewItem);}
其次,删除功能,代码如下:
void CTreeCtrlDemoDlg::OnBnClickedBtnDel(){ // TODO: 在此添加控件通知处理程序代码 HTREEITEM hItem = m_tree.GetSelectedItem(); if (!hItem) return; //HTREEITEM hParentItem = m_tree.GetParentItem(hItem); m_tree.DeleteItem(hItem); // 在vs2015环境下,这一行代码就可以,在删除一个节点之后,会自动选中下一个节点 // 但是,如果在比较老的编译器下,可能还需要上一行和下一行的代码,来保证删除后 // 选择下一个节点的功能 //m_tree.SelectItem(hParentItem);}
再次,修改功能,代码如下:
void CTreeCtrlDemoDlg::OnBnClickedBtnMod(){ // TODO: 在此添加控件通知处理程序代码 HTREEITEM hItem = m_tree.GetSelectedItem(); if (!hItem) return; CString strInput; GetDlgItemTextW(IDC_EDIT_INPUT, strInput); m_tree.SetItemText(hItem, strInput);}
最后,选择一个树形节点后,将其内容显示在编辑框中,这也是需要注意的一个点。我们需要右击树形空间,类向导,找到IDC_TREE(TreeControl的ID号),添加TVN_SELECCHANGED消息,流程如下所示:
添加代码如下所示:
void CTreeCtrlDemoDlg::OnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult){ LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 HTREEITEM hItem = m_tree.GetSelectedItem(); if (hItem) { CString strInput = m_tree.GetItemText(hItem); SetDlgItemTextW(IDC_EDIT_INPUT, strInput); } *pResult = 0;}
2. RichEditControl
效果如下所示:
这里面主要用到了颜色对话框和字体对话框
我们需要为RichEditControl控件添加一个变量,CRichEditCtrl m_edit;但是在添加时,会有一个提示,忽略就可以了,它主要是提示你需要调用一个函数,后面我们会讲解。
提示信息如下所示:
首先,我们来看颜色对话框的使用,代码如下:
void CRichEditCtrlDemoDlg::OnBnClickedBtnColor(){ // TODO: 在此添加控件通知处理程序代码 CHARFORMAT cf = { 0 }; cf.cbSize = sizeof(CHARFORMAT); m_edit.GetSelectionCharFormat(cf); CColorDialog colorDialog(cf.crTextColor); if (colorDialog.DoModal() == IDOK) { cf.crTextColor = colorDialog.GetColor(); cf.dwMask = CFM_COLOR; cf.dwEffects = 0; m_edit.SetSelectionCharFormat(cf); }}
再次,我们来看字体对话框,代码如下所示:
void CRichEditCtrlDemoDlg::OnBnClickedBtnFont(){ // TODO: 在此添加控件通知处理程序代码 CHARFORMAT cf = { 0 }; cf.cbSize = sizeof(CHARFORMAT); m_edit.GetSelectionCharFormat(cf); CFontDialog fontDialog(cf); if (fontDialog.DoModal() == IDOK) { fontDialog.GetCharFormat(cf); m_edit.SetSelectionCharFormat(cf); }}
代码貌似已经完成,但是当我们点击运行时,发现窗口一闪而过,这是怎么回事呢?难道编译有问题,可是仔细检查后,没有发现有编译错误啊,那是怎么回事呢?这要回到我们刚才添加m_edit变量时,提示的那个消息,那个消息的提示是让我们调用一个函数来着,在对话框初始化函数中,代码如下:
BOOL CRichEditCtrlDemoApp::InitInstance(){//TODO: call AfxInitRichEdit2() to initialize richedit2 library. AfxInitRichEdit2(); // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。 否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 将它设置为包括所有要在应用程序中使用的 // 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp::InitInstance(); AfxEnableControlContainer(); // 创建 shell 管理器,以防对话框包含 // 任何 shell 树视图控件或 shell 列表视图控件。 CShellManager *pShellManager = new CShellManager; // 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("应用程序向导生成的本地应用程序")); CRichEditCtrlDemoDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: 在此放置处理何时用 // “确定”来关闭对话框的代码 } else if (nResponse == IDCANCEL) { // TODO: 在此放置处理何时用 // “取消”来关闭对话框的代码 } else if (nResponse == -1) { TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n"); TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n"); } // 删除上面创建的 shell 管理器。 if (pShellManager != NULL) { delete pShellManager; }#ifndef _AFXDLL ControlBarCleanUp();#endif // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, // 而不是启动应用程序的消息泵。 return FALSE;}
//TODO: call AfxInitRichEdit2() to initialize richedit2 library.
我们根据第一行的提示信息,调用AfxInitRichEdit2()函数即可,这样就能使得颜色对话框和字体对话框正常工作了。
本文主要是想说明MFC的一些基本功能,没有做太多详细的说明,比如控件绑定的变量名等并没有做说明!如有错误,请批评指正!
1 0
- MFC-两个基本控件:TreeControl以及RichControl
- MFC-两个基本控件:DateTimeControl以及CalendarControl
- MFC树视图控件 Treecontrol
- MFC-TreeControl
- MFC控件(四)(树视图控件TreeControl)
- MFC列表控件ListControl和树控件TreeControl
- MFC列表控件ListControl和树控件TreeControl
- MFC列表控件ListControl和树控件TreeControl
- MFC列表控件ListControl和树控件TreeControl
- MFC列表控件ListControl和树控件TreeControl
- TreeControl控件的使用(一)
- TreeControl
- MFC-三个基本控件EditControl、CheckBoxControl以及ComBoxControl
- MFC-三个基本控件ProgressControl、ScrollBarControl以及SpinControl
- MFC-三个基本控件、SliderControl、HotKey以及ListControl
- 递归实现MFC TreeControl动态建树
- MFC TreeControl为复选框添加响应函数
- mfc基本控件用法
- 使用CSS3开启GPU硬件加速提升网站动画渲染性能
- Java总结篇系列:Java泛型
- POJ
- 排序算法总结
- SSH免密码登录
- MFC-两个基本控件:TreeControl以及RichControl
- Maven中添加Oracle jdbc jar包
- fnxdvjnbxdhtlxh
- OpenGLES与OpenGL的区别
- SpringData JPA查询分页demo
- python 文件的读写操作
- NvsN集火模拟器
- 单点登录
- Android轮播实现