MFC所遇问题总结

问题1:在测试选项卡控件时,原先在子对话框上定义了一个文本框,并关联了变量,然后再把这个文本框删除,执行程序,遇到以下问题,


解决办法:对话框显示,弹出中止,重试,忽略,问题所在就是控件的问题。你可以在函数DoDataExchange,这个函数自动生成的,是变量和控件关联的都在这个函数里边。在各个CPP文件下,搜索这个函数,看函数内是否包含了文本框所关联的变量,若有,则删除,问题得到解决。




问题2:执行程序后,对话框的大小不可调

解决办法:改下对话框的属性就行了,Border改成Resizing,Minimize Box跟Maxmize Box选上就行了


问题3:已经定义的ID,在调用时仍然显示未定义

解决办法:添加头文件 #include "Resource.h"



问题4:位图不能自适应picture control大小

解决办法:参考https://www.2cto.com/kf/201707/653256.html  感谢作者  作者描述如下

void CTestDlg::AddPitcure()
{
 
     CBitmap bitmap; 
     //加载指定位图资源 Bmp图片ID 
     bitmap.LoadBitmap(IDB_BITMAP_MAIN);   
     //获取对话框上的句柄 图片控件ID 
     CStatic *p=(CStatic *)GetDlgItem(IDC_MAINMode);   
     //设置静态控件窗口风格为位图居中显示  
     p->ModifyStyle( 0xf ,SS_BITMAP|SS_CENTERIMAGE);  
     //将图片设置到Picture控件上 
     p->SetBitmap(bitmap);  
 
     BITMAP bmpInfo;
     bitmap.GetBitmap(&bmpInfo);
     CDC dcMemory;
     CDC* pDC=GetDlgItem(IDC_MAINMode)->GetDC();
     dcMemory.CreateCompatibleDC(pDC);
     CBitmap* pOldBitmap = dcMemory.SelectObject(&bitmap);
     CRect rect;
     m_Picture.GetClientRect(&rect);
     int nX = rect.left + (rect.Width() - bmpInfo.bmWidth) / 2 ;
     int nY = rect.top + (rect.Height() - bmpInfo.bmHeight) / 2 ;
     //pDC->BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 0, 0, SRCCOPY); 
     pDC->SetStretchBltMode(COLORONCOLOR);
     pDC->StretchBlt( 0 , 0 ,rect.Width(),rect.Height(),&dcMemory, 0 , 0 , bmpInfo.bmWidth, bmpInfo.bmHeight,SRCCOPY);
     dcMemory.SelectObject(pOldBitmap);
     ReleaseDC(pDC);
}

AddPitcure()放在OnPaint消息函数里面,且前面需加UpdateWindow();,不然添加的位图会显示不全。


但是本人将代码加入OnPaint消息函数消息函数后,与picture control关联的变量m_oriPicture不能识别,没有找到原因,请大家指教。

(原因找到,本人将picture control放在了子对话框上,而OnPaint消息函数是在父对话框的相关cpp文件里,因此在该文件中调用

子对话框中的控件的关联变量时,要利用子对话框的类来调用,即用m_para1.m_oriPicture

所以本人将代码放在了某个按钮的响应函数中,并按照自己所定义的标识符做了修改,问题得以解决,位图已经可以自适应控件大小了。

在解决这个问题的过程中,点击按钮,出现过另外一个错误


通过加入断点调试发现,bitmap.GetBitmap(&bmpInfo); 这句代码在该按钮响应函数中已经出现过,因此报错,删除后,问题解决。


问题5:在第一个按钮的响应函数中定义的IPlImage*变量在另一个按钮中不能使用(两个按钮在同一个对话框上)

解决办法:给这两个按钮所在的对话框的类添加IPlImage*变量,这样就不用在按钮的响应函数里再定义了,而且都能使用。



问题六:本人在子对话框下添加了一个组合框控件,在按照http://www.jizhuomi.com/software/189.html所述进行初始话时,

运行时出现错误,该帖子中是在主对话框下添加的组合框控件,并在主对话框下的OnInitDialog函数下进行的初始化。至于为什么出错

至今没有找到原因,请多多指教。

解决办法:在子对话框添加OnInitDialog函数,OnInitDialog 在vs2010中实现为虚函数  所以在  项目 -> 类向导 

->  选中子对话框对应的类->虚函数-> 找到OnInitDialog 添加即可,并在该函数中添加组合框控件初始化代码。




问题七:在子对话框上,无法添加按钮响应函数

解决办法:应该是resource.h里面ID重复了,修改按钮的ID,问题解决。



问题八:控件的ID无法识别,include了resource.h后依然没有

解决办法:include了resource.h后,然后双击打开resource.h后关闭,即可识别


猜你喜欢

转载自blog.csdn.net/hahaha_2017/article/details/79689658
今日推荐