zoukankan      html  css  js  c++  java
  • Windows编程学习笔记(十二)

    第八章 菜单及其他资源

    这一部分主要学习了windows程序中对资源的定义及使用。

    在windows程序中,主要有以下几种资源:

    ·图示·游标·字符串·自订资源·菜单·键盘快捷键·对话框·位图

    /*******************************************************/

    使用图标资源

    ·定义好一个图标 #define IDI_MYICON  123  (当然这个IDI_MYICON必须是存在的)

    ·载入资源 hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_MYICON));

    ·使用资源 这时我们就可以通过hIcon来使用图标资源

    /*******************************************************/

    自订光标

           自订游标一般为单色,大小为32*32像素,在创建游标时,记得要定义游标的热点。

    我们可以这样载入自订游标

    Wndclass.hCursor = LoadCursor(hInstance,MAKEINTRESOURCE(IDC_MYCURSOR));

    举个简单的例子,如果我们想一个程序中的不同窗口处使用不同的游标,我们可以改变每个子窗口类别中的hCursor字段,让每个窗口使用不同的游标。

    SetClassLong( hwndChild, GCL_HCURSOR, (LONG)hCursorChild );

         这样,当鼠标进入子窗口的控制视野中时,鼠标就会显示出hCursorChild的游标了。

    /*******************************************************/

    STRING资源

         当定义好一个string类的资源后,我们可以使用loadstring来把字符串资源复制到一个缓冲区中

     LoadString( hInstance, id, szBuffer, iMaxLength);

    /*********************************************************/

    菜单资源

    当您建立或改变程序中的菜单时,把顶层菜单和每一个弹出式菜单想象成各自独立的菜单是有用的。顶层菜单有一个菜单句柄,在顶层菜单中的每一个弹出式菜单也有它自己的菜单句柄。系统菜单(也是一个弹出式菜单)也有菜单句柄。

    菜单中的每一项都有三个特性

    ·菜单中显示什么,它可以是字符串或是位图

    ·wm_command消息中的ID或在使用选择菜单时windows显示的弹出式菜单句柄

    ·菜单项的属性,包括是否被禁用,无效化或被选中。

    /********************************************************/

    使用菜单:  

    当一个菜单定义好后,可以这样载入

      hMenu = LoadMenu(hInstance , MAKEINTRESOURCE( ID_MENU));

    我们也可以在窗口类别中指定NULL菜单,窗口建立后在给窗口指定一个菜单:

    SetMenu( hwnd , hMenu);

    菜单和消息

       当使用者选择一个菜单时,windows通常项消息处理程序发送几个消息。

    WM_INITMENU  wparam:主菜单句柄   lparam:0

    WM_MENUSELECT  当使用者在菜单项中移动鼠标,程序会收到WM_MENUSELECT消息

            LOWORD(wparam):被选中项目 id或弹出式菜单句柄

            HIWORD(wparam):选择旗标

            lParam : 包含被选中项目的菜单句柄

    WM_INITMENUPOPUP  当windows准备显示一个弹出式菜单时,他给窗口消息处理程序发送这个消息,

            wParam:弹出式菜单句柄

            LOWROD(lParam):弹出式菜单索引

            HIWORD(lParam): 系统菜单为1,其余为0

    WM_COMMAND  表示我们已经从菜单中选中了一个被启用的菜单项。

           LOWORD(wParam):菜单id

    /*******************************************************************/

    几个函数

    ·CheckMenuItem( hMenu , iSelection , MF_UNCHECKED ); 用于取消或选定相应的项目

    ·EnableMenuItem( hMenu , IDM_MENU , MF_ENABLED); 用于设定菜单的有效状态

       MF_ENABLED 此菜单可以使用

       MF_DISABLED 菜单不可使用,但是不变灰

       MF_GRAYED 菜单不可使用,同时变灰

    ·GetSubMenu( hMenu, iPosition ); 获得指定位置弹出式菜单的句柄

    ·iCount = GetMenuItemCount(hMenu); 获得菜单的元素的数目

    ·GetMenuItemID(hMenuPopup , iPosition); 获得弹出式菜单的ID

    ·DestoryMenu(hMenu); 销毁菜单句柄

    /***********************************************************/

    浮动弹出式菜单

       当我们单击鼠标右键时,我们想使他弹出一个浮动菜单,我们可以这样做:
    hMenu  = LoadMenu(hInst, szAppName);

    hSubMenu = GetSubMenu(hMenu, iIndex);

    point.x = LOWORD(lParam);

    point.y = HIWORD(lParam);

    ClientToScreen(hwnd, &point);

    TrackPopupMenu( hSubMenu , TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL);

    其中GetSubMenu中的iIndex是我hMenu主菜单中第几个菜单句柄下标,0~n-1,一般来说是0。当获得鼠标的位置时,要通过ClientToScreen()将坐标转换为屏幕坐标。最后调用TrackPopupMenu使菜单显示。

    TrackPopupMenu用于显示一个菜单项的某个元素Item。

  • 相关阅读:
    计算中文或全角字符串的长度
    day25 python学习 继承,钻石继承 多态
    day25 python学习 继承,钻石继承
    day24 python学习 类 画元,命名空间作用域,组合,人狗大战升级
    第四周经典问题收集
    day23 python学习 类 人狗大战
    day20 python sys os time json pickl 正则
    python 常见的内置函数
    encode decode enumerate
    3.易错点和新要掌握的内容
  • 原文地址:https://www.cnblogs.com/lvpengms/p/1662963.html
Copyright © 2011-2022 走看看