Win32API学习笔记第六章(三)

这次的笔记,首先要记录4个(两对)比较实用的函数:

LONG WINAPI GetWindowLong(
  _In_ HWND hWnd,
  _In_ int  nIndex
);
LONG WINAPI SetWindowLong(
  _In_ HWND hWnd,
  _In_ int  nIndex,
  _In_ LONG dwNewLong
);
DWORD WINAPI GetClassLong(
  _In_ HWND hWnd,
  _In_ int  nIndex
);
LONG WINAPI SetWindowLong(
  _In_ HWND hWnd,
  _In_ int  nIndex,
  _In_ LONG dwNewLong
);

这两个函数的第二个消息宏开头分别对应:
GWL,GCL(说白了就是首字母缩写)

Get(Set)WindowLong说白了就是获得(设置)某一个窗口的

GWL_EXSTYLE
额外风格
GWL_HINSTANCE
窗口的实例句柄
GWL_HWNDPARENT(这个标识符SetWindowLong不可用)
父窗口句柄
GWL_ID
窗口ID
GWL_STYLE
窗口风格
GWL_USERDATA
一个用户创建窗口的应用程序使用的文件
GWL_WNDPROC
窗口过程函数的地址

Get(Set)ClassLong说白了就是获得(设置)某一个窗口类的

GCW_ATOM(这个标识符SetClassLong不可用)
返回一个ATOM类(第一无二的,可用于代替窗口类名来创建一个窗口)和RegisterClass的返回值是一个东西
GCL_CBCLSEXTRA(这个标识符SetClassLong不可用)
返回与类相关的额外内存的大小(在cbClsExtra设定的)
GCL_CBWNDEXTRA(这个标识符SetClassLong不可用)
返回与窗口相关的额外内存的大小(在cbWndExtra设定的)
GCL_HBRBACKGROUND
关于窗口类的刷子颜色的
GCL_HCURSOR
窗口类光标
GCL_HICON
窗口类图标
GCL_HICONSM
窗口类小图标
GCL_HMODULE
注册类模块句柄
GCL_MENUNAME
菜单名称(RC中的话要用到MAKEINTRESOURCEW转化为字符串)
GCL_STYLE
窗口类类型
GCL_WNDPROC
窗口类窗口过程函数指针


接下来继续讲菜单:
有一个右键浮动式菜单,就是我们平常用的鼠标右键
这个菜单要使用它其实很简单,思路就是我们吧这个菜单单独在收到鼠标右键时显示就好了
让它显示就调用:TrackPopupMenu(HMENU,标志位,x,y,0(保留位必须为0),拥有这个菜单的窗口句柄,NULL);这个函数的具体说法和用法已经在百度百科很详细了
那么这个时候问题来了,我们怎么获得哪个HMENU?就用LoadMenu,从实例句柄中(我们知道,RC的内容是保留在exe文件内的,这里就是从存放rc的内存中获取他的句柄)。然后在获取由指定菜单项激活的下拉菜单或子菜单的句柄GetSubMenu
具体用法:(局部)

 wcex.lpszMenuName   = NULL;//不在窗口类内设置菜单。
  hMenu = LoadMenu (hInst, szAppName) ;
  hMenu = GetSubMenu (hMenu, 0) ;
   case WM_RBUTTONUP:
          point.x = LOWORD (lParam) ;
          point.y = HIWORD (lParam) ;
          ClientToScreen (hwnd, &point) ;

          TrackPopupMenu (hMenu, TPM_RIGHTBUTTON, point.x, point.y, 
                          0, hwnd, NULL) ; //这里的菜单弹出左上角必须为相对屏幕的。
          return 0 ;

你可能感兴趣的:(windows程序设计)