MFC小笔记

(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));单色绘图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值