MFC编程细节
1. 禁止改变窗口大小
- 首先以文本方式打开项目窗口的“.rc”文件;
- 找到下面这行代码
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
- 修改为以下代码即可。
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU & (~WS_THICKFRAME)
即将| WS_THICKFRAME变为& (~WS_THICKFRAME)形式。
2. 异常解决
虽然编码经验不是很丰富,但碰到异常时,一定不要灰心丧气。通常做法:
- 点“继续”,查看自己文件中的哪行语句出了错误。
- 再逐行(F11)或逐过程(F10),进行调试,同时对关键变量添加监视,观察变量的取值。
- 如果还没找出,还可把变量的值打印出来,确定是不是自己想要的。
(有待补充)
3. 添加状态栏
情景:因为编写的图片处理程序处理时间较长,为了用户使用友好,状态栏在处理前设置为“就绪”,用户等待时设置为“处理中…”,处理完设置为“就绪”。
实现 :
- 打开资源视图,选中String Table,右键“添加资源”。
- 然后在第二行键入状态栏ID(IDS_Status)和标题(处理中…)。
- 在xxDlg.h文件中添加状态栏变量:CStatusBarCtrl m_StatusBar;
- 在xxDlg.cpp的OnInitDialog()中,“// TODO: 在此添加额外的初始化代码”之后,添加如下语句:
m_StatusBar.Create(WS_CHILD | WS_VISIBLE | SBT_OWNERDRAW, CRect(0, 0, 0, 0), this, 0);
int strPartDim[1] = { 100}; //分割数量
m_StatusBar.SetParts(1, strPartDim);
m_StatusBar.SetText(_T("就绪"), 0, 0); //设置状态栏的初始文本
运行程序,可看到对话框上状态栏的初始值是“就绪”。
- 更改状态栏。在处理函数的开头设置为“处理中…”,处理结束后设置为“就绪”。
void function_process(){
m_StatusBar.SetText(_T("处理中..."), 0, 0);
do sth...
m_StatusBar.SetText(_T("就绪"), 0, 0);
}