一直想用API的方法来写一个简单的窗口分割条功能。
今天这个功能实现了,原来是这么的简单,我想的太复杂了。
#define AFX_IDC_SMALLARROWS 30979 // splitter
#define AFX_IDC_HSPLITBAR 30980 // splitter
#define AFX_IDC_VSPLITBAR 30981 // splitter
case WM_MOUSEMOVE:
{
if(wParam ==MK_LBUTTON)
{
SetCursor(LoadCursor(LoadLibrary(TEXT("mfc42.dll")), MAKEINTRESOURCE(AFX_IDC_HSPLITBAR)));
HDC hdc = GetDC(hWnd);
SelectObject(hdc,hPen);
//清除上次
SetROP2(hdc,R2_NOT);
MoveToEx(hdc,xPos,100,0);
LineTo(hdc,xPos,1000);
//重绘新的
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
SetROP2(hdc,R2_NOT);
MoveToEx(hdc,xPos,100,0);
LineTo(hdc,xPos,1000);
ReleaseDC(hWnd,hdc);
}
}
break;
case WM_LBUTTONDOWN:
{
SetCapture(hWnd);
SetCursor(LoadCursor(LoadLibrary(TEXT("mfc42.dll")), MAKEINTRESOURCE(AFX_IDC_HSPLITBAR)));
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
HDC hdc = GetDC(hWnd);
SelectObject(hdc,hPen);
SetROP2(hdc,R2_NOT);
MoveToEx(hdc,xPos,100,0);
LineTo(hdc,xPos,1000);
ReleaseDC(hWnd,hdc);
}
break;
case WM_LBUTTONUP:
{
HDC hdc = GetDC(hWnd);
SetROP2(hdc,R2_NOT);
SelectObject(hdc,hPen);
MoveToEx(hdc,xPos,100,0);
LineTo(hdc,xPos,1000);
ReleaseDC(hWnd,hdc);
ReleaseCapture();
}