HTControl之CHTDlgBase对话框基类

 

HTControlCHTDlgBase对话框基类

 

 

作者

李海涛

日期

2012-10-01

 

文档只是简要说明,在CHTDlgBase.h中有各接口和变量的详细说明。还可以下载HTControlDemo进行调试。

http://download.csdn.net/detail/htcontrol/5423895感兴趣的朋友请关注我的资源列表中最新版本

 

 

 

 

一 动态创建框架窗体

 

      VC界面编程以MFC为例,很多软件开发者通常在资源编译器里插入一个对话框进行编辑,然后通过向导生成一个对话框类。笔者认为这是一个很不好的方式,当然这只是根据我的开发经验而言的,不敢武断地说就是不好。下面我说一下这种方式的缺点:

 

1.       良好的界面需要有精确的布局,需要精确到1像素,但是资源编辑器里的数值并不是以像素为单位的,这样你调整的布局和窗口大小就跟实际的不同(当然微软提供了这2种单位相互转换的API,如果动态创建窗体,那么就可以直接输入窗体的各种坐标,这样就精确了。

 

2.       如果您公司有相当多类似的项目,有些界面原型都差不多,你新做一个项目工程时,某个界面原型在其他工程中有,你是不是想省去在资源编辑器中一顿拖拽、添加事件、添加变量再生成一个对话框类,而是想从其他工程中把CPP复制过来呢。这个当然可以这么干,不过你还要修改本工程的资源文件使控件ID之类的很多东西都对应上,我想大家都知道很麻烦。如果这个对话框类是动态创建的,没有和资源文件进行绑定,就是一个独立的类,那么你只需简单的把CPP加入新的工程中,替换一下类名等即可。

 

有的朋友可能会说,动态创建那就不能所见即所得了,其实这点不必担心,哪个正规点的公司没有美工人员呢,项目启动时美工人员早就该把界面原型等的用工具做好了,而且控件布局都有精确的坐标信息,开发者只需对照着就行了。

动态创建的代码段举例如下:

     DWORD dwStyle = WS_VISIBLE | WS_SYSMENU | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_THICKFRAME;

     CHTControlDemoDlg2* dlg = new CHTControlDemoDlg2();

     dlg->CreateModallessDlg(350, 130, 800, 600,"HTControlDemo2",dwStyle);

 

 

二 窗体外观(客户区与非客户区)

 

        默认的窗体外观多数情况下不符合商业软件的要求,这样就需要重绘,但是窗体默认是有客户区和非客户区的,这样就需要2部分的重绘和它们之间的协调。如果使窗体只有客户区,那么就想怎么画就怎么画了,也就是外观想咋表现就咋表现(稍微夸张了点)。其实,国产软件如腾讯的QQ,  迅雷等等都是这么做的。想确认的读者可以用Spy++看看就知道了。

去掉非客户区很简单,只是在创建窗体的属性中不要包含相应的属性即可。

DWORD dwStyle = WS_VISIBLE | WS_SYSMENU | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_THICKFRAME;

 

 

 

三 调整窗体大小

 

要调整窗体大小需要给窗体添加WS_THICKFRAME属性(当然也有不添加这个属性通过其他方式实现的),但是添加了WS_THICKFRAME属性,系统就会给窗体创建非客户区,虽然通常只有几个像素的边框,但是系统默认要绘制这部分区域,这样就破坏了自己的绘制,CHTDlgBase对话框基类在内部进行处理从而避免了这个问题。

 

 

四 无效子窗口

 

通常为了避免界面的闪烁,要给父窗体添加WS_CLIPCHILDREN 属性,但是添加这个属性后有一个副作用,就是当无效父窗体某区域时,此区域上的子窗体并不能无效。CHTDlgBase对话框基类通过重载了

void InvalidateRect(LPCRECT lpRect, BOOL bInvalidateChildren = FALSE);接口使子窗体也能无效。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值