UI小结1

我所做的界面都是去掉WS_CAPTION 自绘标题栏的

1.通过WM_SETFOCUS/WM_KILLFOCUS设置标题栏在不同状态下显示不同图片时,必须注释掉其默认处理

2.绘制透明BUTTON时,传递主窗口的hdc/mem dc时,必须在动态Create之前,否则Button对应位置就是一片白的

3.

You construct a CEdit object in two steps. First, call the CEdit constructor and then call Create, which creates the Windows edit control and attaches it to theCEdit object.

When Create executes, Windows sends the WM_NCCREATE, WM_NCCALCSIZE, WM_CREATE, and WM_GETMINMAXINFO messages to the edit control.

These messages are handled by default by the OnNcCreate, OnNcCalcSize, OnCreate, and OnGetMinMaxInfo member functions in theCWnd base class. To extend the default message handling, derive a class fromCEdit, add a message map to the new class, and override the above message-handler member functions. OverrideOnCreate, for example, to perform needed initialization for the new class.

4.重绘MFC CMenu时:

CMenu menu;
menu.LoadMenu( IDR_MENU2 );

CMenu *pMenu = menu.GetSubMenu(0);
m_Menu.LoadMenu( pMenu->Detach()  );


5.

关于使用SetROP2,采用异或的方法实现动画效果的问题求教-->SunShining转移

各位大侠好。
我使用MFC提供的SetROP2函数实现了在固定背景颜色下的物体移动的动画效果,但同时也遇到一个问题:当背景色不是纯色,例如背景为一幅图片时,我所要绘制的物体颜色就不能保持我在画笔中设置的颜色。
请问可以怎么样解决这一问题,或者有无其他的方法。谢谢!

是的,在使用XOR异或操作向屏幕输出时会有上述问题,其实XOR只是一个简单的动画解决方案,在实际应用中建议还是使用脏矩形等更实用的方案实现动画

脏矩形简单的说就是屏幕上哪个区域被改动了就更新那一块,被改动的那块就是“脏矩形”。比方说你的要求是在固定的背景上移动某个物体,那么好,你先将要画上物体的那小块背景保存到内存中,然后将要画的东东画上去,稍作延时将备份在内存中的区域恢复到屏幕上原来的位置上,此时背景被还原了,接下来循环以上的步骤,保存下一块要弄脏的区域,画上物体,延时还原……
由于每个操作间的时间很短,所以物体开始运动了。脏矩形的优点就是效率高,但实现起来比双缓冲技术稍复杂一些。

如果在屏幕区几乎同一位置上有两个或多于两个的物体发生重叠,当要移动物体时,使用脏矩形法如何擦除物体?

这就涉及到让路规避问题了,简单的说用递归的思路去处理就行了,设定一个优先级,优先级高的物体先在背景上做脏矩形,优先级低的在高的物体上做脏矩形,一个压一个,恢复时的顺序正好相反,先恢复优先级低的……


7._AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const
{ return this == NULL ? NULL : m_hWnd; }

我以前一直以为是  returnm_hWnd == NULL ? NULL : m_hWnd; 对这个东西非常奇怪。。自己搞错了


8. CImageList的析构:if ( m_ImageList.GetSafeHandle() ) m_ImageList.DeleteImageList();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值