例10-1】创建一个基于单文档结构的应用程 序,在视图中显示一行字符串“ Hello World!”,通过建立包含“显示”和“颜色选 择”两个菜单项的“操作”菜单来控制字符 串,菜单项“显示”用以控制字符串的显示 与否,菜单项“颜色选择”中包含一个级连 菜单,内容为“红”、“绿”和“蓝”三个 E- Res. rc-IDR MAINFRAME(Menu) ID OPER SHOW 文件()查看操作[Q]帮助出 显示+W ID OPER RED 颜色选择 红色[B] 绿色[G ID OPER GREEN 蓝色[日] ID OPER BLUE Hello world!
6 【例10-1】创建一个基于单文档结构的应用程 序,在视图中显示一行字符串“Hello World!”,通过建立包含“显示”和“颜色选 择”两个菜单项的“操作”菜单来控制字符 串,菜单项“显示”用以控制字符串的显示 与否,菜单项“颜色选择”中包含一个级连 菜单,内容为“红” 、 “绿”和“蓝”三个 菜单项。 Hello World! ID_OPER_RED ID_OPER_GREEN ID_OPER_BLUE ID_OPER_SHOW
在 My_Res view. h中的 class CMy_Res view: public Cview 中的 public处加入如下声明: COLORREF m colors(3];O户可选颜色数组 DWORD m cOloriNdex;∥当前所选颜色索引 CString m_-strShow;∥显示的内容 BOoL m show;∥是否显示
7 在My_ResView.h中的 class CMy_ResView : public Cview 中的public处加入如下声明: COLORREF m_nColors[3]; //用户可选颜色数组 DWORD m_nColorIndex; // 当前所选颜色索引 CString m_strShow; // 显示的内容 BOOL m_bShow; // 是否显示
在CMy_ Res view: CMy_Review0中初始化成员变量: m_cOlors[0=RGB(255,0, 0) m_cOlors[1/=RGB(0, 255,0) m_cOlors(2] = RGB(0, 0, 255); m cOloriNdex=0 m str Show = "Hello world! m shoW= TRUE AEvoid CMy_ Resview: On Draw(CDC* pDC) 中加入如下代码绘制字符串: if(m_ show) i pDC-> Set TextColor(m_cOlors[m_n ColorIndex ∥设置物出字符牛颜色 pDC>7 extort(100100 m str Show;∥输出字符中
8 在CMy_ResView::CMy_ResView()中初始化成员变量: m_nColors[0] = RGB(255,0,0); m_nColors[1] = RGB(0,255,0); m_nColors[2] = RGB(0,0,255); m_nColorIndex = 0; m_strShow = "Hello World!"; m_bShow = TRUE; 在void CMy_ResView::OnDraw(CDC* pDC) 中加入如下代码绘制字符串: if(m_bShow) { pDC->SetTextColor(m_nColors[m_nColorIndex]); // 设置输出字符串颜色 pDC->TextOut(100,100,m_strShow); // 输出字符串 }
若编译运行程序,可看到程序输出一行红色 的字符串,但颜色设置菜单项还没有起作用 下面将介绍如何通过菜单项来控制程序, 在介绍菜单项的响应时,必须先了解几个消 息响应机制: COMMAND消息的响应 UP DATE COMMAND U消息的响应 ON COMMAND RANGE对 COMMAND消息的响应 ON UPDATE COMMAND UI RANGE X UPDATE COMMAND UI 消息的响应
9 若编译运行程序,可看到程序输出一行红色 的字符串,但颜色设置菜单项还没有起作用 下面将介绍如何通过菜单项来控制程序, 在介绍菜单项的响应时,必须先了解几个消 息响应机制: • COMMAND消息的响应 • UPDATE_COMMAND_UI消息的响应 • ON_COMMAND_RANGE对COMMAND消息的响应 • ON_UPDATE_COMMAND_UI_RANGE 对 UPDATE_COMMAND_UI 消息的响应
(1) COMMAND消息的响应 添加了对 COMMAND消息的响应之后, My_Review. h发 生如下变化: ll Generated message map functions protected IKIAFX MSG(CMy_Res view) afx_ msg void OnOper Show(; JAFX MSG Message Maps Member Variables Automation I ActiveX Events Class Info I Class name Add class D: .. My Res\My Resviewh, D: \. My Res\My Resviewcpp Object ID Messages: Delete Function PER GREEN Edit Code ID VIEW STATUS BAR ID VIEW TOOLBAR Member functions: V OnEgin Printing V OnDraw ON ID OPER SHOW: COMMAND V On PreparePrinting Description: Handle a command (from menu, accel, cmd button)
10 (1) COMMAND消息的响应 添加了对COMMAND消息的响应之后, My_ResView.h发 生如下变化: // Generated message map functions protected: //{{AFX_MSG(CMy_ResView) afx_msg void OnOperShow(); //}}AFX_MSG