请问在VS2005的环境下,MFC自动生成的多文档,在不用CSplitterWnd的前提下,如何分割子窗口? 请问在VS2005的环境下,MFC自动生成的多文档,在不用CSplitterWnd的前提下,如何分割子窗口?要自己重新写个功能和CSplitterWnd差不多的类吗?请各位大虾先大概讲下思路先,然后再贴点代码,多谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为什么不用?自己做不一定比MS做的好啊。网上有很多分割窗口的源代码,不过好像都是从CSplitterWnd派生出来的 可以参考CSplitterWnd的源代码。 上网找一个什么工具,名字我忘记了,效果绝对比MS的好,并不是自己做的就不如MS,微软的又不是天! 你要先搞清楚 CSplitterWnd的处理机制再自己写 用或参考其源代码吧。WTL中也有类似的代码。 各位大侠,麻烦提供下源代码,谢谢我估计下载了WTL的代码也找不出其中我需要的部分 LRESULT CALLBACK ProcSplitter(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_LBUTTONDOWN: SetCapture(hwnd); break; case WM_LBUTTONUP: ReleaseCapture(); break; case WM_MOUSEMOVE: { if ((wParam & MK_LBUTTON) == MK_LBUTTON && GetCapture() == hwnd) { HDWP hdwp; RECT rect, rectStatus, rectTree; hdwp = BeginDeferWindowPos(3); GetClientRect(GetParent(hwnd), &rect); GetClientRect(hStatus, &rectStatus); GetWindowRect(hTree, &rectTree); DeferWindowPos(hdwp, hTree, NULL, 0, 0, rectTree.right - rectTree.left + (short)LOWORD(lParam), rect.bottom - rectStatus.bottom, SWP_NOMOVE | SWP_NOZORDER); DeferWindowPos(hdwp, hSplitter, NULL, rectTree.right - rectTree.left + (short)LOWORD(lParam), 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER); DeferWindowPos(hdwp, hList, NULL, rectTree.right - rectTree.left + (short)LOWORD(lParam) + 2, 0, rect.right - rectTree.right + rectTree.left - (short)LOWORD(lParam) - 2, rect.bottom - rectStatus.bottom, SWP_NOZORDER); EndDeferWindowPos(hdwp); } } break; default: return DefWindowProc(hwnd, Msg, wParam, lParam); } return 0; } SetCapture和ReleaseCapture是分别在鼠标左键按下与释放的时候捕获和释放鼠标,这是分隔条的一般要求。这段代码中的核心部分就是在处理鼠标移动的事件,就是当鼠标左键按下并且分隔条捕获鼠标的时候来改变三个相关窗口的位置和宽度。具体的矩形操作与主窗口WM_SIZE的代码原理相似,我就不多说了。 既然是MFC自动生成的多文档(MDI),何必用CSplitterWnd.先删除VIEW和DOC,再将CMDIFrameWnd分割为多个CMDIChildWnd(如3个)作为容器,然后可以在各CMDIChildWnd中创建你要的类(如对话框)请下载我的"SpecialMDI.zip" 多谢大虾的代码,不过你的"SpecialMDI.zip"我进去了下载不了,麻烦你弄好下 我这里"我的资源"上不去了,你要不忌讳给我一个Email地址我给你发去. 求高手指导MFC中的sqlite编程 求教IPC5372-2康拓工控IO卡程序 VC CString转换成float的问题 如何创建一个分割条不能被拖动的窗口? 一段数据库连接代码,但还没消化 求unicode下 VC++取汉字字符串首字母方法 关于ON_COMMAND的很简单的问题 求救一个超级无奈的问题!!!弹出对话框中的列表框的问题!!!!救命啊!!时间很紧救救我!!没钱了拜托了!! 有关VC动态库调试的问题,急用,恳请高手指教,万分感谢!! 拖动控件同时绘制控件周围的矩形框 朋友给我发qq远程协助,有个“接受”“取消”,怎么用代码点击“接受”? 紧急求救:2部相机相对位置的定位问题
WTL中也有类似的代码。
我估计下载了WTL的代码也找不出其中我需要的部分
{
switch (Msg)
{
case WM_LBUTTONDOWN:
SetCapture(hwnd);
break;
case WM_LBUTTONUP:
ReleaseCapture();
break;
case WM_MOUSEMOVE:
{
if ((wParam & MK_LBUTTON) == MK_LBUTTON && GetCapture() == hwnd)
{
HDWP hdwp;
RECT rect, rectStatus, rectTree;
hdwp = BeginDeferWindowPos(3);
GetClientRect(GetParent(hwnd), &rect);
GetClientRect(hStatus, &rectStatus);
GetWindowRect(hTree, &rectTree);
DeferWindowPos(hdwp, hTree, NULL, 0, 0, rectTree.right - rectTree.left + (short)LOWORD(lParam), rect.bottom - rectStatus.bottom, SWP_NOMOVE | SWP_NOZORDER);
DeferWindowPos(hdwp, hSplitter, NULL, rectTree.right - rectTree.left + (short)LOWORD(lParam), 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
DeferWindowPos(hdwp, hList, NULL, rectTree.right - rectTree.left + (short)LOWORD(lParam) + 2, 0, rect.right - rectTree.right + rectTree.left - (short)LOWORD(lParam) - 2, rect.bottom - rectStatus.bottom, SWP_NOZORDER);
EndDeferWindowPos(hdwp);
}
}
break;
default:
return DefWindowProc(hwnd, Msg, wParam, lParam);
}
return 0;
} SetCapture和ReleaseCapture是分别在鼠标左键按下与释放的时候捕获和释放鼠标,这是分隔条的一般要求。这段代码中的核心部分就是在处理鼠标移动的事件,就是当鼠标左键按下并且分隔条捕获鼠标的时候来改变三个相关窗口的位置和宽度。具体的矩形操作与主窗口WM_SIZE的代码原理相似,我就不多说了。
先删除VIEW和DOC,再将CMDIFrameWnd分割为多个CMDIChildWnd(如3个)作为容器,然后可以在各CMDIChildWnd中创建你要的类(如对话框)
请下载我的"SpecialMDI.zip"