一、.弹出式菜单的快速制作
步骤1:菜单资源的添加
由于是制作弹出式菜单,所以你可能会采用View as Popup的方式来添加一个弹出式菜单,这里不建议这么做,直接采用默认的编辑方式如下图
步骤2:选择事件
若视图类中添加则选择在WM_CONTEXTMENU消息中定义实现,若其他控件可以选择右键等,看具体情况而定了,自己发挥了。
步骤3:具体代码如下
CMenu menu;
menu.LoadMenu(IDR_FILE_LIST);
menu.GetSubMenu(0)->EnableMenuItem(ID_ADD_FILE,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED );
上面的语句只是个菜单项变灰并不使能例子,你可以在这里做一些菜单弹出时的初始化
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,ptPos.x,ptPos.y,this);
由于采用GetSubMenu(0)的形式你可以吧系统的所有弹出式菜单都在一个菜单资源中完成了,方便管理。
二、.用户自定义消息的加入
自定义消息的加入需要四个地方添加代码,例子代码如下,一条语句一个地方哦,别搞错
#define WM_USER_ADD WM_USER+1//这个简单自己想了
ON_MESSAGE(WM_USER_ADD,OnAdd)//CPP文件中的消息映射表BEGIN_MESSAGE_MAP以下
afx_msg void OnAdd( WPARAM wParam, LPARAM lParam );//CPP对应的.H中,自己找一下类似的地方
void CXXXView::OnAdd( WPARAM wParam, LPARAM lParam ){}//这个实现了,肯定知道吧
好了这样就可以使用SendMessage()来发个消息,就执行相应的代码了。
三、控件消息的安排
在编写一些界面操作时,经常搞不清一些消息放到什么地方好,若放控件自己类或其父类中时,但又要用到veiw和doc中的一些东西就觉的特别麻烦,要去取主框架等,觉的程序特别乱,还有在一些控件类中include 的mainfrm.h doc.h view.h就会搞的到处编译不通过。好像跟头文件的顺序有关系,不知道大家是不是这样的。
我这里总结一下我的经验,举个例子,一个单文档程序,有个浮动条(CDialogBar做的所以有资源),浮动条中有个列表,比如双击列表要改变doc的内容,并显示。
若把消息放到浮动条类或列表自己的类中就要通过全局来获得对doc和view的操作,所以我把消息都定义到view中去,这样操作就简单了。这里有个技巧就是如何方便的把消息放倒view中,如果在类列表中打开类向导再选择view类就看不到控件的id,就无法添加了,但如果你打开资源,按Ctrl+W就可以打开类向导,选择view类,查看控件id,哈哈,是不是有了,这样就成功咯,但这样的后果就是view类可能会变的非常庞大,所以的消息都有他接收了,但至少比编译不通过好啊。
但如果是自己手工创建的没有资源的控件,那只能自己手工添加了。若不会添加就看看有资源的是如何添加的,对照一下就行了。
好了希望这点说明对大家有帮助,大家的满意是我工作的动力啊,谢谢大家的支持。
更多的待续