HWND、HANDLE、HDC等有何区别!

lyz123 2003-03-25 02:11:45
本人初学,见笑了。
...全文
315 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
meCAD 2003-03-26
  • 打赏
  • 举报
回复
收藏
hellobcb 2003-03-26
  • 打赏
  • 举报
回复
收藏,学习!
wpg 2003-03-25
  • 打赏
  • 举报
回复
都是整数,没区别
  • 打赏
  • 举报
回复
常用句柄类型及其说明

句柄类型 说明
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);
Jim3 2003-03-25
  • 打赏
  • 举报
回复
HWND:窗口句柄,系统通过窗口句柄来在整个系统中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那个窗口接收

其余的不清楚

Lewolf 2003-03-25
  • 打赏
  • 举报
回复
本来是一回事,甚至和DWORD Unsigned int 都一样,不同的是用在不同的句柄声明里面,这样可以很明确的知道是什么句柄
yesry 2003-03-25
  • 打赏
  • 举报
回复
楼上的等于没说
qiuafa 2003-03-25
  • 打赏
  • 举报
回复
当然有区别了,看书吧。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧