资讯专栏INFORMATION COLUMN

Win32常用API讲解

cjie / 3392人阅读

摘要:该函数通过调用实现函数原型参数含义实例句柄对话框模板名指定拥有对话框的窗口指向对话框过程的指针函数作用创建一个非模态对话框,需要使用结束该对话框。

初讲

MessageBox

函数作用:弹出一个对话框,典型的模态型对话框
函数原型:int WINAPI MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)

参数含义:

hWnd:该消息框的父窗口句柄,如果此参数为NULL,则该消息框没有父窗口
lpText:消息框的内容
lpCaption:消息框的标题
uType:对话框的按钮样式和图标

按钮样式:

MB_OK:默认值,包含一个确认按钮
MB_OKCANCEL:包含确定以及取消两个按钮
MB_YESNO:包含是以及否两个按钮
MB_ABORTRETRYIGNORE:包含终止,重试以及跳过三个按钮
MB_YESNOCANCEL:包含是,否以及取消三个按钮
MB_RETRYCANCEL:包含重试以及取消两个按钮

图标样式:

MB_ICONINFORMATION:蓝色i
MB_ICONASTERISK:蓝色i
MB_ICONQUESTION:蓝色?
MB_ICONWARNING:黄色!
MB_ICONEXCLAMATION:黄色!
MB_ICONSTOP:红色x
MB_ICONERROR:红色x
MB_ICONHAND:红色x

消息返回值:

IDYES:点击是
IDNO:点击否
IDOK:点击确认
IDCANCE:点击取消
IDABORT:点击终止
IDRETRY:点击重试
IDIGNORE:点击忽略

Demo:

#include 

int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow){
    int chioce = MessageBox(NULL,"HelloWorld","Test",MB_OKCANCEL | MB_ICONINFORMATION);
    if(chioce = IDOK){
        MessageBox(NULL,"You choosed OK","Test",MB_OK | MB_ICONINFORMATION);
    }
    return 0;
}

CreateWindow

函数作用:创建窗口实例!一个完整的窗口程序应该先注册窗口类,创建窗口实例,设置窗口的显示状态,最后发送重绘消息以防被其它窗口覆盖后不能刷新

函数原型:HWND CreateWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HANDLE hlnstance, LPVOID lpParam)

参数含义:

lpClassName:指向窗口类名
lpWindowName:指定标题或者静态文本框文本
dwStyle:指定窗口风格(标题,边框,滚动条...)
x:相对于父窗口的横坐标
y:相对于父窗口的纵坐标
nWidth:窗口宽度
nHeight:窗口高度
hWndParent:指向父窗口的句柄
hMenu:该窗口使用的某种类型的菜单的句柄
hlnstance:与窗口相关联的模块实例的句柄
lpParam:指向 CREATESTRUCT 结构的指针,传递 WM_CREATE 消息

重点说明:
1.一般窗口程序套路是:RegisterClass -> CreateWindow -> ShowWindow -> UpdateWindow,按照面向对象实现很好理解,先注册窗口类再实例化窗口,之后的 ShowWindow 是用于设置属性让窗口可见(WS_VISIBLE)或者不可见,UpdateWindow 是用来发送WM_PAINT消息更新窗口的

2.任何控件都属于窗口,所以创建某个控件也是需要 CreateWindow 函数,传入不同的 style 就表示不同的控件,比如:静态文本static,按钮button,编辑框edit,复选框Check Box

3.CreateWindow 会给普通窗口过程发送一个 WM_CREATE 消息,对于层叠,弹出式和子窗口,CreateWindow 给窗口发送WM_CREATEWM_GETMINMAXINFOWM_NCCREATE消息

BeginPaint

函数作用:当窗口收到 WM_PAINT 消息时,需要首先调用 BeginPaint 获取设备环境句柄,在其它情况下需要使用 GetDC 来获取设备环境句柄!因为我们不能直接访问硬件,所以需要借助设备环境(Device Context)这个中间层间接访问键盘,显示器等硬件设备

函数原型:HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint)

参数含义:

hwnd:被重绘窗口的句柄
lpPaint:指向一个用来接收绘画信息的 PAINTSTRUCT结构

当得到了设备环境句柄后,我们就可以调用图形设备接口(GDI)中已经封装好的函数,诸如:TextOut,DrawText,CreateMenu,CreateBitmap,Rectangle,CreatePen等

SendMessage

函数作用:主动发送一条消息给窗口

函数原型:LRESULT SendMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)

参数含义:

hWnd:目标窗口的句柄
msg:发送的消息
wParam:附加消息,某些特定的消息需要用到
lParam:附加消息,某些特定的消息需要用到

GetWindowText

函数作用:用于将指定窗口的标题文本(如果存在)拷贝到一个缓存区内,如果指定的窗口是一个控件,则拷贝控件的文本

函数原型:Int GetWindowText(HWND hWnd, LPTSTR lpString, Int nMaxCount)

参数含义:

hWnd:窗口或者控件句柄
lpString:指向接收文本的缓冲区指针
nMaxCount:最大的保存长度

SetWindowText

函数作用:用于改变指定窗口的标题栏的文本内容(如果窗口有标题栏),如果指定窗口是一个控件,则改变控件的文本内容

函数原型:BOOL SetWindowText(HWND hWnd, LPCTSTR lpString)

参数含义:

hWnd:要改变文本内容的窗口或控件的句柄
lpString:指向改变后的字符串指针

DialogBox

函数作用:从一个对话框资源中创建一个模态对话框,该函数直到指定的回调函数通过调用 EndDialog 函数中止模态的对话框才能返回控制。该函数通过调用 DialogBoxParam 实现

函数原型:int DialogBox(HINSTANCE hInstance, LPCTSTR lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc)

参数含义:

hInstance:实例句柄
lpTemplate:对话框模板名
hWndParent:指定拥有对话框的窗口
lpDialogFunc:指向对话框过程的指针

CreateDialog

函数作用:创建一个非模态对话框,需要使用 DestroyWindow 结束该对话框。该函数通过调用 CreateDialogParam 实现

函数原型:HWND CreateDialog(HINSTANCE hlnstance, LPCTSTR lpTemplate, HWND hWndParent, DLGPROC IpDialogFunc)

参数含义:

hInstance:标识该模块的可执行文件含有对话框模板
lpTemplate:对话框模板名
hWndParent:指定拥有对话框的窗口
lpDialogFunc:指向对话框过程的指针

重点说明:
当关闭非模态对话框或者窗口时,会调用DestroyWindow,这个函数先发送 WM_DESTROY 消息,接着发送 WM_NCDESTROY 消息

LoadString

函数作用:从资源里加载字符串资源到 CString 对象里,参数是资源 ID,同类型的还有LoadIconLoadCursor

函数原型:int WINAPI LoadStringA(HINSTANCE hInstance, UINT uID, LPSTR lpBuffer, int nBufferMax)

参数含义:

hInstance:应用程序实例句柄
uID:资源ID
lpBuffer:接收从资源里拷贝字符串出来的缓冲区
nBufferMax:指明缓冲区大小

OutputDebugString

函数作用:输出调式信息到 Debugger

函数原型:void OutputDebugString(LPCTSTR lpOutputString)

参数含义:

lpOutputString:在调试器中调试时,输出的字符串

SetWindowPos

函数作用:改变一个子窗口,弹出式窗口或顶层窗口的尺寸,位置或Z序

函数原型:WINUSERAPI BOOL WINAPI SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)

参数含义:

hWnd:窗口句柄
hWndInsertAfter:窗口的 Z 顺序
x:指定窗口新位置的左边界
y:指定窗口新位置的顶边界
cx:以像素指定窗口的新的宽度
cy:以像素指定窗口的新的高度
uFlags:窗口尺寸和定位的标志

FindWindowEx

函数作用:在窗口列表中寻找与指定条件相符的第一个子窗口

函数原型:HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter, LPCTSTR lpszClass, LPCTSTR lpszWindow)

参数含义:

hwndParent:要查找子窗口的父窗口句柄
hwndChildAfter:子窗口句柄,查找从在Z序中的下一个子窗口开始
lpszClass:指向一个指定了类名的空结束字符串
lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串

AnimateWindow

函数作用:该函数在显示与隐藏窗口时能产生特殊的效果,有两种类型的动画效果:滚动动画和滑动动画

函数原型:BOOL AnimateWindow(HWND hWnd, DWORD dwTime, DWORD dwFlags)

参数含义:

hWnd:指定产生动画的窗口的句柄
dwTime:指明动画持续的时间
dwFlags:指定动画类型

MoveWindow

函数作用:改变指定窗口的位置和大小

函数原型:BOOL MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint)

参数含义:

hWnd:窗口的句柄
x:指定了CWnd的左边的新位置
y:指定了CWnd的顶部的新位置
nWidth:指定了CWnd的新宽度
nHeight:指定了CWnd的新高度
bRepaint:指定了是否要重画CWnd

EnumWindows

函数作用:枚举所有屏幕上的顶层窗口,并将窗口句柄传送给定义的回调函数。FindWindow 和它类似,只找顶层窗口不找子窗口

函数原型: BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)

参数含义:

lpEnumFunc:指向一个应用程序定义的回调函数指针
lPararm:指定一个传递给回调函数的应用程序定义值

回调函数原型:BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)

IsWindow

函数作用:判断目标窗口是否存在

函数原型:BOOL IsWindow(HWND hWnd)

参数含义:

hWnd:目标窗口句柄

GetWindow

函数作用:返回与指定窗口有特定关系(如Z序或所有者)的窗口句柄

函数原型:HWND GetWindow(HWND hWnd, UNIT nCmd)

参数含义:

hWnd:窗口句柄
nCmd:说明指定窗口与要获得句柄的窗口之间的关系

重要说明:
Z 序表示窗口层叠时的顺序,Z 序越大窗口越靠前,即 Z 序小的窗口会被 Z 序大的窗口遮挡

终讲

原本草稿都写好了,打算一口气把文件操作,进程操作以及网络套接字相关 API 的常见函数及其参数都介绍一下,但是我不小心找到了大佬们汉化后的 Win32API参考手册,我觉得我也不可能有这个介绍得详细了!所以之后查 API 就用这个啦,英文好的朋友还可以直接去微软官网找文档

END

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/61310.html

相关文章

  • 不要迷恋我,我只是利用Python修改了游戏内存

    摘要:上篇文章我许了一个愿,就是想让大家多多关注我,然后我的粉丝就蹭蹭的涨了好几百,谢谢大家的厚爱。可是我发现粉丝是涨了,三连变少了,谢谢大家这次给我三连,我一定再接再厉。地址的寻找阳光总值,种植一个豌豆需要,非常不够用。 目录 前言 游戏的安装 思路       一句话总结       大概的思...

    ermaoL 评论0 收藏0
  • WSL 配置指北:打造 Windows 最强命令行

    摘要:截至目前,商店中可用的发行版有以及。尽管上的控制台已经改进了不少可以看看的官方博客,但其依然是最难用的终端模拟器之一,或许没有之一。因此,为了实现我们的目标,一个更强大的终端模拟器是必须的。上的老牌终端模拟器,功能极为强大,要啥有啥。 原文发表在我的 博客 上,欢迎订阅。;) 在两年前的八月,Microsoft 正式发布了 Windows 10 Anniversary Update 周...

    isaced 评论0 收藏0
  • Scrapy:python3下的第一次运行测试

    摘要:,引言的架构初探一文讲解了的架构,本文就实际来安装运行一下爬虫。第一次运行的测试成功,接下来的工作接下来,我们将使用来实现网络爬虫,省掉对每个人工去生成和测试的工作量。,文档修改历史,首次发布 1,引言 《Scrapy的架构初探》一文讲解了Scrapy的架构,本文就实际来安装运行一下Scrapy爬虫。本文以官网的tutorial作为例子,完整的代码可以在github上下载。 2,运行环...

    dack 评论0 收藏0
  • 基于 Python 的 Scrapy 爬虫入门:环境搭建

    摘要:一基础环境由于不是职业的开发者,因此环境是基于的。二安装打开命令行工具创建虚拟环境,默认情况下会创建目录,所有的虚拟环境都会产生一个子目录保存在此,里面包含基本程序文件以及库文件。 目录 基于 Python 的 Scrapy 爬虫入门:环境搭建 基于 Python 的 Scrapy 爬虫入门:页面提取 基于 Python 的 Scrapy 爬虫入门:图片处理 作为一个全栈工程师(...

    Gu_Yan 评论0 收藏0
  • Windows桌面程序自动化控制之uiautomation模块全面讲解

    摘要:大家好,我是小小明,经过个月断断续续的整理,模块桌面自动化控制的系统教程终于成型出炉了。模块所支持的剪切板操作的功能也远远超过常规的专门用于剪切板复制粘贴的库。很多程序没有实现,所以不支持自动化。 ...

    GT 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<