MFC菜单

菜单消息产生的顺序问题?

 WM_INITMENU---当选中顶层菜单时发生

WM_INITPOPUPMENU--在子菜单显示之前--在这里AFX进行了一些操作--添加新的消息比如

:命令更新消息/WM_MEASUREITEM--WM_DRAWITEM

WM_COMMAND

注意:在窗口中重写PreCreateWindow--可以改变窗口的外观形态。

***************************************自定义系统菜单****************

可以通过GetSystemMenu()获得系统菜单的指针Cmenu*然后就可以进行

菜单的操作。

注意在onSyscommand处理程序中要对参数(nId & FFF0==ID_CUSTOM_**)进行判断,以自定义处理程序,并最

后要调用 CFrameWnd::OnSystemCommand()基类的函数。

*************************************************自制菜单的方式

当需要创建的菜单有图片需求的时候

1*利用Cmenu的AppendMenu的参数是CBitmap*可以给菜单添加位图,缺陷就是位置尺寸固定。

2*方式就是利用Cmenu的ModifyMenu方法把已经有的菜单修改为菜单的MF_OwerDraw标记,这时在窗口的

Wm_MeasureItem中设置要绘制菜单的宽度和高度。---显示前调用一次

 在WM_DrawItem---对每一个OnwerDraw项都要调用

  在OnDrawItem中进行菜单的自定义绘制。

****************************************绘制位图到屏幕的小技巧

windows不允许将位图直接显示到屏幕,需要利用内存DC过渡。

1*先创建位图对象,加载位图。然后利用CBitmap.GetObject(&bm)---(BITMAP bm),上面函数的作用

是用bm 结构封装位图信息(宽高)。

2*创建一个与屏幕相关的DC.

3*创建一个与屏幕dc相关的内存DC,CreateCompatibleDC(&screenDC),然后把位图选入内存DC;

4*li利用屏幕DC的方法,screenDC.BitBlt(.....)位块传输把内存位图写到屏幕DC,从而在屏幕显示。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值