C语言编写Windows下的实用程序:[3]窗口

2025-10-20 17:04:00

1、打开VS2010,建立Win32项目SimpleWindow。

C语言编写Windows下的实用程序:[3]窗口

2、设置项目为"空白项目",从而不让VS2010为我们生成代码。

C语言编写Windows下的实用程序:[3]窗口

3、在项目中添加"SimpleWindow.cpp"文件。

C语言编写Windows下的实用程序:[3]窗口

4、这里我们要介绍几个Windows的函数,首先是RegisterClassEx函数。

该函数注册在随后调用CreateWindow函数和CreateWindowEx函数中使用的窗口类。 RegisterClass函数己经由函数RegisterClassEx函数来代替,但是,如始著果不需要设置类的小目标则仍然可以使用RegisterClass函数。

可以参见微软的msdn。

C语言编写Windows下的实用程序:[3]窗口

5、CreateWindowEx函数:

该函数创建一个具有扩展风格的层叠式窗口、弹出式窗口或子窗口,其他与CreateWindow函数相同。关于创建窗口和其他参数的内容,请参看CreateWindow。具体仍可见微软的msdn。

C语言编写Windows下的实用程序:[3]窗口

6、消息处理函数WindowProc :

该函数是一个应用程序定义的函数。它处理发送给窗口的消息。WINDPROC类型定义了一个指向该回调函数的指针。WindowProc是用于应用程序定义函数的占位符。

函数原型:

LRESULT CALLBACK WindowProc (HWND hwnd,

UINT uMsg,

WPARAM wParam,

LPARAM lParam);

参数:

hwnd:指向窗口的句柄。

uMsg:指定消息类型。

wParam:指定其余的、消息特定的信息。该参数的内容与UMsg参数值有关。

IParam:指定其余的、消息特定的信息。该参数的内容与uMsg参数值有关。

返回值:返回值就是消息处理结果,它与发送的消息有关。

速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0 以上版本;头文件:winuser.h;库文件:用户自定义。

我们这里的窗口处理函数,如图所示,并没有做太多工作,而只是做了简单的消息处理。

C语言编写Windows下的实用程序:[3]窗口

7、最终SimpleWindow的代码如下:

#include <Windows.h>

#include <tchar.h>

LRESULT WINAPI WinProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);

int WinMain( 

    __in HINSTANCE hInstance, 

    __in_opt HINSTANCE hPrevInstance, 

    __in LPSTR lpCmdLine, 

    __in int nShowCmd 

    )

{

    TCHAR *szName = _T("myWindow");

    WNDCLASSEX wc = {0};

    HWND hWnd     = NULL;

    MSG Msg       = {0};

    wc.cbClsExtra    = 0;

    wc.cbWndExtra    = 0;

    wc.cbSize        = sizeof(WNDCLASSEX);

    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//通过函数来设置一个白色的背景,这里大家设置为NULL看看,会很有趣的

    wc.hCursor       = NULL;//不设置

    wc.hIcon         = NULL;//不设置

    wc.hIconSm       = NULL;//不设置

    wc.hInstance     = hInstance;//当前程序的句柄,hInstance是有系统给传递的

    wc.lpfnWndProc   = WinProc;//窗口处理过程的回调函数。

    wc.lpszClassName = szName;//窗口类的铲雁名字。

    wc.lpszMenuName  = NULL; 

    wc.style         = CS_HREDRAW | CS_VREDRAW; 

    RegisterClassEx(&wc);//在系统中注册

    hWnd = CreateWindowEx(WS_EX_CLIENTEDGE,szName,_T("我的窗口我喜欢"),WS_OVERLAPPEDWINDOW,

        200,100,600,400,NULL,NULL,hInstance,NULL);//创建缝棍蕉窗口,窗口标题为"我的窗口我喜欢"

    if(hWnd == NULL)

    {

        MessageBox(NULL,_T("There's an Error"),_T("Error Title"),MB_ICONEXCLAMATION|MB_OK);

        return 0;

    }

    ShowWindow(hWnd,nShowCmd);//显示窗口

    UpdateWindow(hWnd);

    //下面是对消息的循环处理,大家先不必管这些,下节课我会细说的

    while(GetMessage(&Msg,NULL,0,0))

    {

        TranslateMessage(&Msg);//翻译消息

        DispatchMessage(&Msg);//分派消息

    }

    return Msg.message;

}

//消息处理函数

LRESULT WINAPI WinProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)

{

    switch(Msg)//处理消息过程

    {

    case WM_DESTROY://响应鼠标单击关闭按钮事件

        PostQuitMessage(0);//退出消息队列

        return 0;//退出函数

    }

    return DefWindowProc(hWnd,Msg,wParam,lParam);

}

编译链接后,得到如图中所示,可以看到我们自己的窗口程序就出来了。

C语言编写Windows下的实用程序:[3]窗口

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢