windows开发记事本程序纪实(二)逻辑篇1(4)
这里只是在CMainWnd中添加了对于WM_SIZE的消息响应函数,要让RichEdit响应这个消息,还需要在Main_Proc中添加相应过程
HANDLE_MSG(hWnd, WM_SIZE, Main_OnSize);
这样,RichEdit也就可以跟着主窗口大小自由伸缩了。上述过程处理函数中,主要调用了三个基本的API接口。
1. GetClientRect,这个API用于获取客户区大小,RichEdit伸缩的大小就是这个大小值
2. GetDlgItem 获取窗口下某一个控件的句柄,例如GetDlgItem(hWnd, IDC_RICHEDIT),就可以获得主窗口下RichEdit控件对应的句柄。
3. MoveWindow。它的第一个参数就是需要进行位置大小变化的窗口句柄。我们这里将2中的RichEdit句柄传入,后面的参数分别是矩形区域的left点,top点,width值以及height值。最后一个参数用来表示大小改变后要不要重绘窗口。注意,这里选择了TRUE。如果选择FALSE,会出现以下这种情况:当将窗口变小后,在进行变大操作,RichEdit并没有立即适应变大后的区域,还是保留在原来变小的区域。效果如图5所示:
图5 MoveWindows中参数repaint设置为FALSE后潜在问题
基于此,我们在用MoveWindow改变窗口大小时,最好使得repaint为TRUE,保证实时改变。
2.3 主程序ICON设计
在上述截图中可以看出,主界面的左上角ICON一直是windows自带的ICON。为了与windows自带记事本做到类似,直接到网上找了一个类似的JPG图标转为ICO,然后设置了程序的ICON。具体的图标设置方法请参考http://www.cnblogs.com/lhglihuagang/p/3927283.html
在图标设置后,可以运行程序查看下最新的效果,如图6所示
图6 设置程序图标后的结果
最后,对话框窗口的标题Dialog实在显得有些另类,这里根据windows自带记事本的标题“无标题 - 记事本”,将这个值进行了相应的修改,具体为IDD_MAIN-> properties -> Caption –> 无标题 - 记事本最后,对话框.
3. 运行结果
在添加了CMainWnd以及RichEdit后,整个程序的运行后效果如下图7所示:
图7 本节程序改动后的效果
4. 结论
1. 使用RichEdit控件时,需要手动加载riched20.dll,否则程序运行后没有任何界面效果
2. RichEdit换行、滚动条、边框都可以通过properties中相应字段进行设置