MFC 常用技巧整理

MFC 常用技巧整理

1,RADIO按钮的分组使用:

CTRL+D 调整想分成一组的RADIO在连续的Z序上。直到遇到另一个非RADIO控件或GROUP属性为TRUE 的RADIO控件。

2,对话框非标题条拖动:

LBUTTONDOWN消息响应中加一句:

PostMessage( WM_SYSCOMMAND, SC_MOVE | HTCAPTION, 0);   //只需要发送一个消息,点在窗口中就可移动窗口。

3,弹出对话框设置透明度:OnInitDialog()中:

SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
        GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^WS_EX_LAYERED);
    ::SetLayeredWindowAttributes(m_hWnd,RGB(1,0,0),150,LWA_COLORKEY|LWA_ALPHA);

4,STATIC或EDIT控件背景透明,改变字体颜色:OnCtlColor中,STATIC为例如下

if (nCtlColor == CTLCOLOR_STATIC)
    {
        pDC->SetBkMode(TRANSPARENT);
        pDC->SetTextColor(RGB(0,0,255));
        return (HBRUSH)GetStockObject(NULL_BRUSH);
    }

5,得到鼠标离开控件的消息:在OnMouseMove中添加:

TRACKMOUSEEVENT tme;
             tme.cbSize = sizeof(tme);
             tme.hwndTrack = m_hWnd;
             tme.dwFlags = TME_LEAVE;
             _TrackMouseEvent(&tme);

有人愿意使用SetCapture/ReleaseCapture组合,个人使用感觉判断控件组的离开消息时,只能使用上面后方法处理。

6,有时需要将一些消息如WM_LBUTTONDOWN消息传递出去,一般将消息机制需要的参数补齐如下即可发出。

PostMessage(WM_LBUTTONDOWN,MK_LBUTTON, MAKELONG(pMsg->pt.x, pMsg->pt.y) );

7,有时需要让一个控件或对话框能跟随鼠标移动,这时鼠标消息在控件内接收,但移动要在父窗口中,否则可能会闪烁或不流畅。

8,加载图片最好使用CImage其内部使用GDI+,可以让您不用关心图片类型:

#include <atlimage.h>

CImage img;
            img.Load(m_cstrPicPath);
            if (img.IsNull())
            {
                return ;
            }

m_hBmpPic = img.Detach();
            img.Destroy();

9,GDI显示图片时StretchBlt有时缩放效果不好,大多数情况下须修改模式为:

pDC->SetStretchBltMode(HALFTONE);

10,显示多个控件刷新时或控件内数据改变较多时(如LIST,TREE等)可能会闪烁,这时使用LockWindowUpdate()/UnlockWindowUpdate()组合应该会有效果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值