MFC问题集锦


1.现象:有多个CDockablePane停靠在一起时,标签页上的图片大小不正常,如右侧标签所示
     
 方法:将原本加载图片的函数CWinApp::LoadImage
 替换为::LoadImage,并制定需加载的图标大小,问题解决


2. CMainFrame加载其他模块(DLL)的工具栏,菜单无法显示ToolTips

CMFCToolBar提供的显示ToolTip的流程为:需要显示ToopTips时调用
OnNeedTipText ->
     OnToolHitTest进行位置测试->
          OnUserToolTip->
               CFrameWnd::GetToolbarButtonToolTipText->
               TTN_NEEDTEXT->如果是控件则返回控件名称,否则获取利用LoadString加载字符串,如果需显示的ToolTips为工具栏图标,此时id为该工具栏按钮在工具栏上的索引无法获取字符串
           <-    
     如果加载成功,显示字符串,如果是工具栏会显示图标+字符串
     如果失败表明是工具栏提示,加载工具栏图标ID对应的字符串,显示的工具栏提示为图标+字符串+描述
     无论成功失败都尝试设置状态栏信息
     <-
因此可以重新定义CMyToolBar:public CMFCToolBar并重写OnToolHitTest在调用父类的同名函数前
利用AfxSetResourceHandle()切换资源的HINSTANCE为DLL的Instance即可同时完成工具栏提示和状态栏描述字符串的设置

3.现象:由CView直接继承来的视图,利用SetScrollInfo的方法显示滚动条,当缩放视图时,滚动条区域未刷新:
原因:CView在OnSize后默认仅刷新客户区域,没有刷新非客户区,滚动条区域属于非客户区所以没有更新
方法:在OnSize中添加函数SetWindowPos(NULL , 0, 0, 0, 0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_DRAWFRAME);
要求其刷新非客户区


4. 现象:CFormView放到CDockablePane中,出现滚动条后拖动滚动条,按钮类型的控件会出现黑色背景,CStatic类型控件文字可能出现模糊
如:                      
-------->
原因:MFC中的BUG
解决方法:在CFormView的子类中添加函数:

.h文件
  afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM lParam); 

.cpp文件
  ON_MESSAGE(WM_PRINTCLIENT, &CDerivedView::OnPrintClient) 
  LRESULT CDerivedView::OnPrintClient(WPARAM wParam, LPARAM lParam)
    {
        return CView::OnPrintClient(wParam, lParam);
    } 


-------->
-------->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值