《循序渐进学用Visual C++ 6.0》读书笔记(六)
◆题设:
画一个空的对话框MyDlg ,菜单File下有项目Hello,
项目Exit.
◆如何制作菜单?
在Resource面版选择insert | Menu ,输入 MyMenu ,确定.
此时菜单编辑器被激活, 菜单编辑器的使用方法十分容易,
这里就不罗嗦了。
菜单里的每一个"项目"和命令按钮控件几乎一模一样,设置
它不难嘛..
◆如何把菜单连入窗体(如:对话框)?
右击MyDlg的空白处,选属性,有个MENU项目,下拉选MYMENU.
这样就连入成功了.
◆如何把菜单功能关联至窗体(如:对话框)?
在菜单设计器为当前窗口情况下选VISUAL C++的View菜单, 新建
一个class,下一步选已有,选MyDlg,这样就OK了.
◆ 如何使用Class Winzard 为菜单项目Hello(ID_FILE_HELLO)
建立功能呢?
当菜单Hello被点击的时候会产生一个COMMAND消息,我们就对
此消息创建函数OnHello(),代码清单如下:
////////////////////////////////////////////////////////////////////////////////////////////////
void MyDlg::OnHello ()
{
…..
MessageBox(“你好吗?”,”SayHelloTittle”);
…..
}
///////////////////////////////////////////////////////////////////////////////////////////////
◆如何创建弹出式菜单?
我们很惯性地想到,利用释放鼠标消息”WM_RBUTTONUP”,但
是我告诉你用另外一个消息更好,“WM_CONTEXTMENU”,原因
是新式的键盘,有一个按钮专为激活弹出式菜单而设的。利用class
Winzard为此消息创建函数,代码清单如下:
//////////////////////////////////////////////////////////////////////////////////////////////
//这里代码有几个问题,我们呆会才详细讨论。
void MyDlg::OnContextMenu(CWnd *pWnd ,CPoint point )
{ //point我们上次讲过它传递了鼠标当前位置。
。。。。
CPoint m_lPoint;
m_pPoint=point;
ClientToScreen(&m_pPoint);
CMenu * m_lMenu ;
m_lMenu=pWnd->GetMenu();
m_lMenu=m_lMenu->GetSubMenu();
m_lMenu=TrackPopupMenu(TPM_CENTERALIGN+TPM_
LEFTBUTTON, m_pPoint.x, m_pPoint.y, this ,NULL);
}
//////////////////////////////////////////////////////////////////////////////////////////////
◆代码头3句:我地要获得鼠标在屏幕当前位置,point传递的是
相对位置,但point是系统的,我们不应修改它,因此我们创建
m_pPoint复制point的内容,然后用ClientToScreen()函数转换成绝
对位置,还有一点就是这里是实参传递,所以&m_pPoint.
◆代码4-6句:这里创建了一个CMenu指针,我们立刻想到就是
为此指针赋值,GetMenu(),GetSubMenu(),均是CMenu的成员函
数,意思一看就明白了。
问题是我们必须把指针的赋值过程弄清楚:
pWnd是指向MyDlg ,这里指向了MyDlg的File 菜单。
最后通过GetSubMenu()获得了Flie菜单的子菜单。
◆ TrackPopupMenu(显示风格,x, y ,指针,矩形域)
这个是显示弹出式菜单的关键函数,显示风格这里TPM_
CENTERALIGN是鼠标中间弹出,TPM_LEFTBUTTON则是
利用鼠标左键选中,这些都是一般人都这么做的,这个语句,
没什么好研究的,记住就行了。
发表于 @ 2005年03月20日 06:17:00|评论(loading...)