MFC单文档绘图(二)——TabCtrl和CPropertySheet
来源:互联网 发布:电脑usb直连网络 编辑:程序博客网 时间:2024/05/17 06:21
界面如下:
关于TabCtrl和Sheet折腾了几天,开始时在分割出来的窗口上使用TabCtrl发现tab页按钮和编辑框都无响应(原因为TabCtrl控件的父窗口Style类型为child,如果是Popup或Overlapped均正常),必须最大化或者最小化等操作之后才可以操作,并且在视图窗口中更新(调用UpdateAllView)后又出现同样的情况。(目前没有找到比较合适的办法,对窗口的内部机制理解还不够,有知道的望告知),最后决定用Sheet,具体过程如下:
添加基于CPropertySheet基类的CPageSheet类,创建两个对话框(Style为Child),并基于CPropertyPage基类创建对应的类CDrawPage和CScanPage,在CPageSheet中创建上述两个类对应的成员变量。
class CPageSheet : public CPropertySheet{DECLARE_DYNAMIC(CPageSheet)public:CDrawPage m_drawPage;CScanPage m_scanPage;public:CPageSheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);CPageSheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);virtual ~CPageSheet();protected:DECLARE_MESSAGE_MAP()};
并在CPageSheet的构造函数中增加初始化页面的代码。
CPageSheet::CPageSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage):CPropertySheet(nIDCaption, pParentWnd, iSelectPage){}CPageSheet::CPageSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage):CPropertySheet(pszCaption, pParentWnd, iSelectPage){AddPage(&m_drawPage);AddPage(&m_scanPage);SetActivePage(&m_scanPage);}我使用的是多字符集(vs2010),编译运行后发现page的背景全变成了白色。
搜索无果,于是想到跟换背景颜色,在page也的类中添加OnCtlColor和OnEraseBkgnd函数对对话框的背景进行绘制。让没有控件的地方为默认背景色,有控件的地方设置为透明模式。
HBRUSH CPage2::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CPropertyPageEx::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: 在此更改 DC 的任何特性if (nCtlColor == CTLCOLOR_EDIT || nCtlColor == CTLCOLOR_STATIC){pDC->SetBkMode(TRANSPARENT);//return (HBRUSH)::GetStockObject(NULL_BRUSH);}// TODO: 如果默认的不是所需画笔,则返回另一个画笔return hbr;}BOOL CPage2::OnEraseBkgnd(CDC* pDC){// TODO: 在此添加消息处理程序代码和/或调用默认值CRect rect(0,0,0,0);GetClientRect(&rect);CBrush brush;brush.CreateSolidBrush(GetSysColor(COLOR_3DFACE));pDC->FillRect( &rect, &brush);return TRUE;//return CPropertyPageEx::OnEraseBkgnd(pDC);}
可以解决,但是效果不是很理想。折腾了好久以后发现当我把Unicode取消注释之后,界面恢复正常了,虽然变回老版本的样式,但是比较自然。也就是虽然是多字符集的项目,但是不注释Unicode定义(stdafx.h)。
#ifdef _UNICODE……#endif
0 0
- MFC单文档绘图(二)——TabCtrl和CPropertySheet
- MFC单文档绘图(一)——窗体分割
- MFC单文档绘图(三)——滚动条、鼠标指针
- MFC单文档绘图(四)——进度条、禁止程序多开
- MFC单文档下OpenGL绘图(一)
- MFC单文档应用程序基础训练——文本输出、绘图等
- MFC单文档程序 双缓冲绘图
- MFC——仿TabCtrl实现多页显示
- MFC学习笔记(二)——简单绘图
- VC++ 绘图控制(对话框和单文档消息传递)
- CPropertySheet 和 CPropertyPage (帮助文档的调用问题)
- MFC学习--单文档文本框的编辑(二)
- MFC简单绘图(二)
- MFC——单文档、多文档和对话框程序的区别
- MFC复习和学习 第六章 MFC视图文档 MFC视图文档各部分关系 MFC绘图 MFC绘图对象
- VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)
- VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)
- VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)
- apache的HttpClient应用
- 命令行查看Memcached运行状态
- 杭电1711之kmp算法
- iframe无刷新跨域上传文件并获取返回值
- [小技巧] Minicom和QEMU中触发magic sysrq
- MFC单文档绘图(二)——TabCtrl和CPropertySheet
- Servlet生命周期与工作原理
- Ajax
- PostgreSQL data同步工具【pg_rewind】
- HDU 1009 FatMouse' Trade【贪心】
- vim 回到上次编辑的位置
- Log4j 2.0在开发中的高级使用详解—读取配置文件(六)
- 项目管理实战10步法——南航科研系统培训记
- POJ3358 Period of an Infinite Binary Expansion