(1)不管在在Frame和View中GetClientRect(&rcClient)总是获得 View的坐标
ClientToScreen(&rcClient)是将(0,0),(x,y)转化成屏幕坐标
(2)做界面皮肤时,处理WM_NCPAINT的同时,还要处理WM_NCACTIVE。否则,右键任务栏时,系统会画出默认的边框。记得注释掉
//return CFrameWnd::OnNcActivate(bActive);
(3)屏蔽最大最小关闭消息:
在WindowProc中:
LRESULT CMYSkinDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == WM_NCHITTEST)
{
LRESULT lRet = CDialog::WindowProc(message, wParam, lParam);
//屏蔽最大最小关闭消息.
if (lRet==HTZOOM || lRet == HTMINBUTTON || lRet == HTCLOSE)
return HTCAPTION;//视为标题栏动作。
else
return lRet;
}
return CFrameWnd::WindowProc(message, wParam, lParam);
}
(4)在OnSize()中SeteindowRgn(hRgn,TRUE)可实现对框架的样子调整。
(5)可以通过设置窗口的透明度来实现异性窗口的显示------
case WM_CREATE:
{
// 设置分层属性
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);//必须加上WS_EX_LAYERED
// 设置透明色
COLORREF clTransparent = RGB(0, 0, 0);
SetLayeredWindowAttributes(hwnd, clTransparent, 0, LWA_COLORKEY);//这里需要注意如果clTransparent= RGB(0, 0, 0);则画刷里面加载的位图只要含黑像素点则都会透明,所以要显示的部分不能含黑像素点。
}
(6)在视图类OnInitialUpdate()中建立按钮,虽然按钮很丑。。。
(7)双缓冲贴图
CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(dc);
MemBitmap.LoadBitmap(IDB_BITMAP);
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
dc->StretchBlt(800,400,48,48,&MemDC,0,0,48,48,SRCCOPY);
//绘图完成后的清理
MemBitmap.DeleteObject();
MemDC.DeleteDC();
(8) dc->FillSolidRect(0, 20, rcClient.right, rcClient.bottom, RGB(55,55,55));单色绘图