⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 g03.htm

📁 一本介绍如何开发游戏,如何进行游戏编程的非常值得一看的好书.
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                图3.10正在运行DEM3_3.EXE<br>                这里唯一需要注意的两个文件是资源文件和头文件:DEMO3_3RES.H和DEMO3_3.RC。<br>                DEMO3_3RES.H的内容:<br>                // defines for the top level menu FILE<br>                #define MENU_FILE_ID_OPEN 1000<br>                #define MENU_FILE_ID_CLOSE 1001<br>                #define MENU_FILE_ID_SAVE 1002<br>                #define MENU_FILE_ID_EXIT 1003</p>            <p>  // defines for the top level menu HELP<br>                #define MENU_HELP_ABOUT 2000</p>            <p>  DEMO3_3.RC的内容:<br>                #include &quot;DEMO3_3RES.H&quot;</p>            <p>  MainMenu MENU DISCARDABLE<br>                {<br>                 POPUP &quot;File&quot;<br>                 {<br>                  MENUITEM &quot;Open&quot;, MENU_FILE_ID_OPEN<br>                  MENUITEM &quot;Close&quot;, MENU_FILE_ID_CLOSE<br>                  MENUITEM &quot;Save&quot;, MENU_FILE_ID_SAVE<br>                  MENUITEM &quot;Exit&quot;, MENU_FILE_ID_EXIT<br>                 } // end popup</p>            <p>   POPUP &quot;Help&quot;<br>                 {<br>                  MENUITEM &quot;About&quot;, MENU_HELP_ABOUT<br>                 } // end popup</p>            <p>  } // end top level menu</p>            <p>  要编译自己的DEMO3_3.CPP可执行文件,一定要确认包含下面文件:<br>                DEMO3_3.CPP——主要源程序。<br>                DEMO3_3RES.H——符号头文件源程序。<br>                DEMO3_3.RC——资源脚本程序。<br>                尝试运行DEMO3_3.EXE和相关源程序。改变菜单项,通过向.RC文件中添加更多POPUP块来添加更多的菜单。并且尝试创建一个层叠式的菜单树。(提示:对于创建菜单的MENUITEM来说,只是用一个POPUP块来替换MENUITEM)。</p>            <p><b>对菜单事件消息的响应</b></p>            <p>  DEMO3_3.EXE的唯一问题是它不能做任何事情。的确,其中主要问题就是不知道如何侦测菜单项选择和操作产生的消息。本节将主要讨论这个主题。<br>                当滑过一级菜单项时,Windows菜单系统产生大量的消息(如图3.11所示)。<br>                图3.11 Windows菜单选择消息流<br>                我们感兴趣的是在选中一个菜单项后放开鼠标时的消息传递。这指的是一个选择过程。选择过程将一个WM_COMMAND消息传递到该菜单连接的窗口WinProc()函数中,指定的菜单项标识符和其他各种数据存储在该消息的wparam和lparam中,如下所示:<br>                msg——WM_COMMAND。<br>                lparam——传递消息的窗口句柄。<br>                wparam——选中的菜单项标识符。<br>                提示:从技术角度上讲,应当从wparam中提取低位的WORD,以保证LOWORD()宏安全。该宏是标准包括中的一部分。因此必须要阅读该内容。<br>                因此你只需要调用函数switch()来处理wparam的参数值,菜单中定义的另一种MENUITEM标识符,就是你的工作了。例如,使用DEMO3_3.RC文件中定义的菜单,还应当添加WM_COMMAND消息句柄,WinProc()以下面方式结束:</p>            <p>  LRESULT CALLBACK WindowProc(HWND hwnd, <br>                               UINT msg, <br>                               WPARAM wparam, <br>                               LPARAM lparam)<br>                {<br>                 // this is the main message handler of the system<br>                 PAINTSTRUCT ps; // used in WM_PAINT<br>                 HDC hdc; // handle to a device context</p>            <p>   // what is the message <br>                 switch(msg)<br>                 { <br>                  case WM_CREATE: <br>                  {<br>                   // do initialization stuff here</p>            <p>      // return success<br>                   return(0);<br>                  } break;<br>              <b>    case WM_COMMAND:<br>                  {<br>                   switch(LOWORD(wparam))<br>                   {<br>                    //handle the FILE menu<br>                    case MENU_FILE_ID_OPEN:<br>                    {<br>                     //do work here <br>                    }//break;<br>                    case MENU_FILE_ID_CLOSE:<br>                    {<br>                     //do work here <br>                    }//break;<br>                    case MENU_FILE_ID_SAVE:<br>                    {<br>                     //do work here <br>                    }//break;<br>                    case MENU_FILE_ID_EXIT:<br>                    {<br>                     //do work here <br>                    }//break;<br>                    //handle the HELP menu<br>                    case MENU_HELP_ABOUT:<br>                    {<br>                     //do work here <br>                    }//break;<br>                    default:break; <br>                   }//end switch wparam<br>                  }break;//end WM_COMMAND</b></p>            <p>    case WM_PAINT: <br>                  {<br>                   // simply validate the window<br>                   hdc = BeginPaint(hwnd,&amp;ps); <br>                   // you would do all your painting here<br>                   EndPaint(hwnd,&amp;ps);</p>            <p>      // return success<br>                   return(0);<br>                  } break;</p>            <p>     case WM_DESTROY: <br>                  {<br>                   // kill the application, this sends a WM_QUIT message <br>                   PostQuitMessage(0);</p>            <p>      // return success<br>                   return(0);<br>                  } break;</p>            <p>     default:break;</p>            <p>    } // end switch</p>            <p>   // process any messages that we didn't take care of <br>                 return (DefWindowProc(hwnd, msg, wparam, lparam));</p>            <p>  } // end WinProc<br>                就是如此简单,但这其实是非法的!当然还有其他的操作一级菜单和菜单项本身的消息,可以阅读Win32 SDK帮助来获得更多的信息。(我几乎无需了解除一个菜单项是否被单击以外的信息。)               <br>                作为菜单工作内容的现实例子,我已经创建了一个很不错的声音演示程序,可以允许通过主菜单来结束一个程序,演示四种不同端声音效果中的一个,最后通过“Help”菜单弹出一个Help对话框。并且.RC文件中包含声音、图表和光标资源。该程序就是DEMO3_4.CPP,让我们首先看一下其资源脚本程序和头文件。<br>                DEMO3_4RES.H的内容:<br>                 </p>            <p>   </p>            <p>&nbsp; </p>            <p>&nbsp; </p>            <p> 图形设备接口GDI介绍<br>              处理重要事件<br>              将消息传递给自己<br>              总结</p>            <p>&nbsp;</p>            <p>[<a href="index.html">目录</a>][<a href="g02.htm">上一页</a>][<a href="g04.htm">下一页</a>]             </p>            </td>        </tr>        </tbody>       </table>    </td>  </tr></tbody></table><script language="javascript">bottomprint()</script></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -