如何绘制自定义边框,其实我试图绘制1像素边框但失败了,我们如何实现这一点? 我曾尝试this.but失败。我试过这样,它工作正常,当窗口没有子窗口..在我的情况下我的窗口上有3个子窗口在这种情况下,我正在闪烁。如何在win32中绘制自定义边框?
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;
一般来说,做自己的非客户绘画是一个坏主意。 (仅仅因为你*可以*做某事并不意味着你*应该*)。 –
谢谢你的回答。我曾尝试过,但没有工作。 – sindhu