如图红色区域是怎么做出来的?mfc
解决方案 »
- ATL中调用activex控件问题
- 为什么ODBC中的API: SQLExecut老是返回SQL_NEED_DATA?
- 进程正常退出的返回值一定是0吗?
- 我是初学windows网络编程的菜鸟,有个问题请教大家。
- 新手问一个困扰很久很简单但是可能需要很长的解释的问题
- 求QQ群(关于平面设计的) 奉献20分
- 重分求数字图象处理的论文(分数还可以另外开贴给)
- 谁那里有xtreme toolkit开发包阿(注册了的)
- 那里有简单的字符串加密和解密C/C++程序参考
- joke100 come!
- VC有可以整列选中的表格控件吗?怎么实现类似excel那样的句柄拖动功能
- CDialog::OnMouseMove(nFlags, point);//这个有与没有怎么感觉一样呢?
我试着做了一个
1:class CTreeCtrlV1 : public CTreeCtrl
2:class CTreeCtrlV2 : public CTreeCtrl
3:class CTestPane : public CDockablePane
然后在CTestPane里定义三个对象
CTreeCtrlV1 *m_TreeCtrlUp; //类视图 - 上面的TreeCtrl
CWnd* m_btnTest; // 分割线
CTreeCtrlV2 *m_TreeCtrlDown;//类试图 - 下面的TreeCtrl
在CTestPane的oncreate里
m_TreeCtrlUp = new CTreeCtrlV1();
m_TreeCtrlUp->Create(WS_VISIBLE|WS_CHILD|TVS_LINESATROOT|TVS_HASLINES |TVS_HASBUTTONS ,CRect(0,0,0,0),this,9105);
m_TreeCtrlUp->ShowWindow(SW_SHOW); m_TreeCtrlDown = new CTreeCtrlV2();
m_TreeCtrlDown->Create(WS_VISIBLE|WS_CHILD|TVS_LINESATROOT|TVS_HASLINES|TVS_HASBUTTONS,CRect(0,0,0,0),this,9106);
m_TreeCtrlDown->ShowWindow(SW_SHOW); m_btnTest = new CWnd();
m_btnTest->Create(afxGlobalData.RegisterWindowClass(_T("MYWnd")),_T(""),WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),this,9107);
m_btnTest->ShowWindow(SW_SHOW);然后在CTestPane的PreTranslateMessage里 写了鼠标左键按下 鼠标移动 鼠标抬起的事件 可以达到差不多的效果 但是有个问题是当拖动分割线后 鼠标移出dockpanel以后就不能移动了。
PreTranslateMessage里的实现如下
if (pMsg->message == WM_LBUTTONDOWN && pMsg->hwnd == m_btnTest->m_hWnd)
{
m_bDown = true;
m_ptMouseDown = pMsg->pt;
ScreenToClient(&m_ptMouseDown);
}
else if(pMsg->message == WM_MOUSEMOVE)
{
if (m_bDown)
{
m_bMouse = true; m_ptMouseMove = pMsg->pt;
ScreenToClient(&m_ptMouseMove);
int nHeight = m_ptMouseMove.y - m_ptMouseDown.y;
m_ptMouseDown = m_ptMouseMove;
nUpTreeH += nHeight;
nDownTreeH -= nHeight;
CRect rect;
GetClientRect(rect);
int nCha = 0;;
if (nUpTreeH <= 0)
{
int temp = nUpTreeH;
nUpTreeH = 1;
nCha = nUpTreeH - temp;
nDownTreeH += nCha;
}
else if (nUpTreeH >= rect.Height() - 6)
{
nUpTreeH = rect.Height() - 6;
nDownTreeH = 1;
}
m_TreeCtrlUp->SetWindowPos(NULL,0,0,rect.Width(),nUpTreeH,SWP_NOACTIVATE|SWP_NOZORDER);
m_btnTest->SetWindowPos(NULL,0,nUpTreeH,rect.Width(),5,SWP_NOACTIVATE|SWP_NOZORDER);
m_TreeCtrlDown->SetWindowPos(NULL,0,nUpTreeH + 5 ,rect.Width(),nDownTreeH,SWP_NOACTIVATE|SWP_NOZORDER); Invalidate(TRUE);
UpdateWindow();
}
}
else if(pMsg->message == WM_LBUTTONUP)
{
if (m_bDown)
{
m_bDown = false;
Invalidate(TRUE);
UpdateWindow();
}
}
如何捕获鼠标在当前窗口外的鼠标移动事件呢?
然后在鼠标弹起的时候 ReleaseCapture();没有效果呢