【发布时间】:2014-04-01 07:24:00
【问题描述】:
如何绘制自定义边框,实际上我正在尝试绘制 1 像素边框但失败了,我们该如何实现呢? 我试过这个。但是失败了。我试过这样,当窗口没有子窗口时它工作正常..在我的窗口顶部有3个子窗口在这种情况下我正在闪烁。
case WM_NCACTIVATE :
{
if(TRUE == wParam)
{
stateofWindow = true;
InvalidateRect(hwnd,NULL,true);
}
else if(FALSE == wParam )
{
stateofWindow = false;
InvalidateRect(hwnd,NULL,true);
}
}
break;
case WM_NCCALCSIZE :
{
if (true == wParam )
{
return 0;
}
}
break;
case WM_PAINT:
{
HDC hcd = NULL;
PAINTSTRUCT ps;
hcd = BeginPaint(hwnd,&ps);
HPEN hPen = CreatePen(PS_SOLID, 1, RGB(165,165,165));;
SelectObject(hcd, hPen);
RECT rcClientRect = {0};
GetClientRect(hwnd,&rcClientRect);
//GetWindowRect(hwnd,&rcClientRect);
if(FALSE == stateofWindow)
{
MoveToEx(hcd,rcClientRect.left,rcClientRect.top,NULL);
LineTo(hcd,rcClientRect.right-1,rcClientRect.top );
LineTo(hcd,rcClientRect.right-1,rcClientRect.bottom-1 );
LineTo(hcd,rcClientRect.left,rcClientRect.bottom-1 );
LineTo(hcd,rcClientRect.left,rcClientRect.top);
}
else
{
HPEN hPen1 = CreatePen(PS_SOLID, 1, RGB(255,0,0));;
SelectObject(hcd, hPen1);
MoveToEx(hcd,rcClientRect.left,rcClientRect.top,NULL);
LineTo(hcd,rcClientRect.right-1,rcClientRect.top );
LineTo(hcd,rcClientRect.right-1,rcClientRect.bottom-1 );
LineTo(hcd,rcClientRect.left,rcClientRect.bottom-1 );
LineTo(hcd,rcClientRect.left,rcClientRect.top);
}
EndPaint(hwnd,&ps);
}
break;
【问题讨论】:
-
一般来说,做自己的非客户绘画是个坏主意。 (仅仅因为你可以做某事并不意味着你应该。)
-
感谢您的回答。我试过了,但它不起作用。