VC常用句柄及类型说明

句柄类型说明

HWND 窗口句柄

  • HINSTANCE 当前实列句柄
  • HCURSOR 光标句柄
  • HFONT 字体句柄
  • HPEN 画笔句柄
  • HBRUSH 画刷句柄
  • HDC 设备环境句柄
  • HBITMAP 位图句柄
  • HICON 图标句柄
  • HMENU 菜单句柄
  • HFILE 文件句柄

系统定义消息宏前缀:

  • BM_ 按钮控制消息
  • CB_ 组合框
  • DM_ 压式按钮
  • EM_ 编辑框
  • LB_ 列表框
  • SBM_ 滚动条
  • WM_ 窗口

不同消息类型取直范围:

  • 系统定义1 0x0000–0x03FF
  • 用户定义内部消息 0x0400–0x07FF
  • 系统定义2 0x0800–0xBFFF
  • 用户定义外部消息 0xC000–0xFFFF

常用的部分 Windows 数据类型:

  • WORD 16位无符号整数
  • LONG 32位有符号整数
  • DWORD 32位无符号整数
  • HANDLE句柄
  • UINT 32位无符号整数
  • BOOL 布尔
  • LPTSTR 指向字符串的32位指针
  • LPCTSTR 指向字符串常量的32位指针

数据结构:

     typedef   struct   tagMSG  
      {  
    HWND hwnd;检索窗口句柄  
      UNIT message;消息直  
      WPARAM wParam;参数  
      LPARAM lParam;参数  
      DWORD time;消息送至队列的时间  
      POINT pt;消息发送时光标位置  
    } 
  typedef   struct   tagPOINT  
  {  
    LONG   x,y;  
  }   POINT;  
 typedef   struct   tagWNDCLASS  
  {  
    UINT       style;  
  WINDPROC lpfnWndProc;  
  Int cbClsExtra;  
  Int cbWndExtra;  
  HINSTANCE hInstance;  
  HICON hIcon;  
  HCURSOR hCursor  
  HBRUSH hbrBackground;  
  LPCTSTR lpszMenuName;  
  LPCTSTR lpszClassName;  

 }WNDCLASS;  
 typedef   struct   tagRECT  
  {  
  LONG left;  
  LONG top;  
  LONG right;  
  LONG bottom;  
  }RECT;  

位图应用:

  • HDC hdc;设备环境句柄
  • HDC hdcmem;内存设备环境句柄
  • HBITMAP hBm;位图句柄
  • BITMAP bm; BITMAP 结构

    hdc=GetDC(hwnd);
    hdcmem=CreateCompatibleDC(hdc);先获得内存设备环境
    hBm=LoadBitmap 加载位图
    (
    hInstanc, 当前应用程序实列句柄
    lpszName 位图名称
    );

    hBm=CreateCompatibleBitmap(hdc,nWidth,nHeight,) 或者是创建位图
    SelectObject(hcdmem,hBm);送入内存

    在输出位图之前获得位图尺寸
    int GetObject
    (
    HANDLE hObject,对象句柄
    int nCount,考贝到缓冲区的字节数
    LPVOID lpObject 接收信息的缓冲地址
    )

    int GetObject
    (
    hBm,
    sizeof(BITMAP),
    (LPVIOD)&bm
    )

    写入信息到位图结构中

  typedef   struct   tagBITMAP  
  {  
      LONG       bmType;      位图类型  
      LONG           bmWidth;                位图宽度  
      LONG           bmHeight;              位图高度  
      LONG           bmWidthBytes;      每一光栅行的字节数  
      WORD           bmPlanes;              位图中位面的数目    
      WORD           bmBitsPixel;        位图中每个象素的位数  
      LPVIOD       bmBits;                  位图位直的地址  
    };BITMAP  

输出位图

  BOOL   BitBlt  
  (  
      HDC   hdcDest,目的设备环境句柄  
      int   Xdext,int   Ydest  目的设备显示位图的基本点  
      int   Width,   int   nHeitght,目的设备显示区域的高和宽  
      HDc   hdcscr  元设备句柄  
      int   xScr,int   yscr,元设备位图的左上角点  
      DWORD   dwrop  位图的显示方式  
  )  

位图的显示方式 dwrop

  • BLACKNESS 输出全黑色
  • DSTINVERT 目标执行取反操作
  • MERGECOPY 将原图与模板执行与
  • MERGEPAINT …………….或
  • NOTSRCCOPY 在拷贝之前将原图执行取反
  • NOTSTCERASE 原和目的执行或,再执行取反
  • PATCOPY 将模版拷贝到目标位置
  • PAINTVERT 将模板和目标位图执行异或
  • SRCCOPY 将原拷贝到目标位图
  • SRCAND 将原和目标执行与
  • SRCPAINT …………..或
  • SRCERASE 目标先取反再和原执行与
  • SRCINVERT 将原和目标执行异或
  • WHITENESS 输出全白

窗口:

  • BOOL EnableWindow(HWND hwnd,Bool bEnable);
  • BOOL MoveWindow(HWND hwnd,int x,int y,int nWidth,int nHeight,BOOL bReprint)
  • bool SetWinodwText(HWND hwnd, LPCTSTR lpszString);
  • int GetWindowText(HWND hwnd, LPSTR lpszString, int nMax)

设备环境:

  HDC   hdc=GetDC(hwnd);  
  void   ReleaseDC(hdc);  
 PAINTSTRUCT   ps;  
  HDC   hdc=BeginPaint(hwnd,&ps)  
 typedef   struct   tagPAINTSTRUCT  
  {  
    HDC   hdc;  
    BOOL   fErase;擦除无效矩形背景  
    RECT   rcPaint无效矩形标识  
    BOOL   fRestore;系统保留  
    BOOL   fIncUpdate;系统保留  
    BYTE   rgbReserved[16]系统保留  
    }PAINTSTRUCT:    
  void   EndPaint(HWND   hwnd,   PAINTSTRUCT   &ps);  

映象模式:

  • MM_TEXT 一个象素 Y向下 X向右
  • MM_HIENGLISH 0.001英寸 Y向上 X向右
  • MM_HIMETRIC 0.01毫米 Y向上 X向右
  • MM_ISOTROPIC系统确定可选 X:Y=1:1
  • MM_LOENGLISH 0.01英寸 Y向上 X向右
  • MM_LOMETRIC 0.1毫米 Y向上 X向右
  • MM_ANISOTROPIC系统确定可选
  • MM_TWIPS 1/1440英寸 Y向上 X向右
  int   nMapMode=GetMapMode(hdc);  
  SetMapMode(hdc,nMapMode);  
VC获得进程ID获得主线程ID获得窗口句柄获得主窗口获得进程名 1.窗口类名 窗口句柄 窗口标题 窗口句柄 HWND FindWindow( LPCTSTR lpClassName, //窗口类名 可用 VC或者VS自带的Spy++查看 LPCTSTR lpWindowName //窗口标题 ); 举例: 以 记事本为例, 记事本 窗口类名 为:NotePad, 窗口标题 视按具体情况而定,假设为"新建 文本文档.txt - 记事本" 窗口类名 窗口句柄 TCHAR lpClassName[]=TEXT("NotePad"); HWND hWnd=::FindWindow(lpClassName,NULL); if(hWnd && IsWindow(hWnd)) ::ShowWindow(hWnd,SW_HIDE); 窗口标题 窗口句柄 TCHAR lpWindowName[]=TEXT("新建 文本文档.txt - 记事本"); HWND hWnd=::FindWindow(NULL,lpWindowName); if(hWnd && IsWindow(hWnd)) ::ShowWindow(hWnd,SW_HIDE); 2.窗口句柄 进程ID 窗口句柄 主线程ID 要使用到的函数: DWORD GetWindowThreadProcessId( HWND hWnd, //目标窗口句柄 LPDWORD lpdwProcessId //返回目标窗口对应进程ID ); 例子: DWORD dwProcId=0;//存放返回的进程ID DWORD dwThreadId=0;//存放返回的主线程ID HWND hWnd=XXXX;//这里省略,可能用任务方式得到一个窗口的句柄.比如用1中的方法. dwThreadId=GetWindowThreadProcessId(hWnd,&dwProcId);//同时得到进程ID和主线程ID. 3.窗口HAND CWnd 用CWnd::FromHandle(HWND hWnd)函数.很多类都有这个函数. 4.进程名 进程ID (注:进程名,即在"任务管理器"中看到的名字) 用CCheckObject类(详细实现源文件); 例子: 以记事本为例,进程名为 NOTEPAD.EXE (不一定是大写哦,得到任务管理器是显示而定); CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); DWORD dwProcId=ch.GetProcessId(Name); 5. 进程名 主线程ID 例子: CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); DWORD dwThreadId=ch.GetThreadId(Name); 6. 进程名 主窗口句柄 CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); HWND hWnd=ch.GetTargetWindowHanle(Name); 7. 其它说明 从CCheckObject类和上面的源码中,不难写出从 进程ID 主线程ID 进程ID 主窗口句柄 主线程ID--->主窗口句柄 等等其它类似转换. 对于主窗口,特点如下: A. 不能用进程ID,要用线程ID,因为一个进程可能有多个线程,每个线程都可能会有主窗口. B. 主窗口不会有WS_CHILD属性 C. 主窗口没有父窗口 D. 主窗口一般都有子窗口(这个不是一定的,但是具有普遍性)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值