MFC对话框应用程序自绘问题积累

MFC对话框应用程序自绘问题积累:(2009)

1.

天问:为什么瑞星的三态按钮要放在同一个PNG文件里?而且背景底色是粉色的呢?

我答:那是因为GDI Plus的DrawImage,或CImage的Draw函数的参数可以是CRect对象用它可以定义PNG文件的坐标                   或用Offset偏移指定矩形区域的PNG文件,粉色是因为粉色不常用?故把它定义为透明色最终用GDI Plus

            或CImage的函数将其透化掉了.

2.

天问:为什么360的主窗口不叫#32770呢 ?为什么它的关闭按钮用SPY++扫不到Button呢?

我答:那是因为360的主窗口从MFC的CWnd类继承并子类化了,也或许直接用SDK写了主类,不过不据我了解不

            像是后者.而且它去除了标题栏和边框,也没有用Button控件,只是贴了一个关闭按钮图片对此区域进行消息响               应。

3.

天问:为什么我的主窗口只有一个背景图,移动时还会闪呢?
我答:那是因为我把绘图函数写在了OnPaint里,关键的是没有重载OnErasBkgnd并return TRUE;

4.

天问:为什么360的关闭按钮当鼠标移上去会变红,而我的却不行呢?

我答:那是因为360截获了DefWindowProc或DefDlgProc,这样它可以在假标题栏上自绘,而我的虽然也做了假标题栏

            但只是在OnPaint里自绘,这样的话,系统误以为你的假标题栏是真标题栏,因此不允许你在标题上乱搞。

            所以要么像360那样再建一个子对话框作为标题栏,要么把关闭按钮等那部分区域排除出标题栏,要么截获                     DefWindowProc或DefDlgProc。
5.

天问:为什么360的假标题栏可以拖动,而我的却不行呢?
我答:确切的说,我的也行,只是我想换成用PtInRect实现,因为OnNCHitTest传回的point是相对于屏幕的,而                         OnMouseMove传回的point是相对于窗口的,GetWindowRect传回的CRect对象是相对于屏幕的
GetClientRect传回             的CRect对象是相对于窗口的,关键的是我在调用PtInRect成员函数的CRect对象里把后两个参数传递了Width各               Height,而正确的是传递Right,Bottom.

6.

不断积累中...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值