Win32学习笔记(15)第一个Windows程序

本文是Win32学习笔记的第一部分,主要介绍如何创建第一个Windows程序。内容涉及WinMain函数的参数解释,调试信息的输出,以及窗口的创建过程,包括WNDCLASS结构体的定义、RegisterClass的使用、CreateWindow和ShowWindow函数的应用。同时,讲解了GetMessage和DispatchMessage在处理消息队列中的作用,以及WindowProc窗口处理函数的默认行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:我们创建的是桌面应用程序

1.WinMain

int WINAPI wWinMain(HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    PWSTR pCmdLine, 
                    int nCmdShow);

解释参数:

<1>hInstance:

在win32中h开头的通常都是句柄,我们知道各种各样的句柄

HANDLE:指向一个内核模块的句柄
HWND:指向一个窗口的句柄
HDC:指向设备上下文的句柄
今天我们学的HINSTANCE:指向一个模块的句柄

大家在看到句柄的时候应该记住:

1.真正的对象在内核层,句柄只是个索引

2.句柄都是个DWORD(四个字节)储存一个索引

<2>hPrevInstance:它用于16位Windows,但现在始终为零。(填空就行)

<3>pCmdLine;nCmdShow:这两个放一起说

之前我们学习过创建进程的函数
BOOL CreateProcessA(
  [in, optional]      LPCSTR                lpApplicationName,
  [in, out, optional] LPSTR                 lpCommandLine,//我们知道进程都是由另一个进程创建的当A进程创建B进程时,通过A进程中的这个参数,把这个值传递给B进程入口函数(WinMain)的pCmdLine中
   ........
  [in]                LPSTARTUPINFOA        lpStartupInfo,//创建你创建的进程由什么方式显现出来是最大化啊,还是最小化啊等等,这会传递给nCmdShow
   ........
);

2.调试信息的输出:

我们不能想用控制台程序直接用printf,我们可以用OutputDebugString(szOutBuff)不过它只能打印固定的字符串(szOutBuff).所以我们定义一个即可

代码如下

#include "framework.h"
#include "WindowsProject1.h"
​
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPWSTR    lpCmdLine,
    _In_ int       nCmdShow)
{
​
    char szOutBuff[0x80];
    DWORD dwAddr = (DWORD)hInstance;
    sprintf(szOutBuff, "模块路径: %x", dwAddr);
    OutputDebugStringA(szOutBuff);
    return 0;
}

我们用debugview++查看输出

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wzprabbit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值