菜单消息产生的顺序问题?
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,从而在屏幕显示。