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);
}
{
return CView::OnPrintClient(wParam, lParam);
}
-------->
-------->