我的第一个win32窗口程序------------记录

// Myday03.cpp : 定义应用程序的入口点。

//


#include "stdafx.h"

#include "Myday03.h"



int APIENTRY WinMain(HINSTANCE hInstance,

                                 HINSTANCE hPrevInstance ,

                                                                                 LPSTR lpCmdLine ,

                                                                                 int nCmdShow )

{

                 LPCTSTR myLpszClassName = (LPCWSTR )_T("MainWin");

                 LPCTSTR myWndTitle = (LPCWSTR )_T("我的第一个窗口");

                 /*

                typedef struct _WNDCLASS {

                UINT style;// 窗口类型

                WNDPROC lpfnWndProc;//窗口处理函数

                int cbClsExtra;//窗口扩展

                int cbWndExtra;//窗口实例扩展

                HINSTANCE hInstance;//实例句柄

                HICON hIcon;//窗口的最小化图标

                HCURSOR hCursor;//窗口鼠标光标

                HBRUSH hbrBackground;//窗口背景色

                LPCTSTR lpszMenuName;//窗口菜单

                LPCTSTR lpszClassName;// 窗口类名

                } WNDCLASS, *LPWNDCLASS;


                typedef struct WNDCLASSEX {

                UINT cbSize;  //WNDCLASSEX 的大小。我们可以用sizeof(WNDCLASSEX)来获得准确的值。

                UINT style; //从这个窗口类派生的窗口具有的风格。您可以用“or”操作符来把几个风格或到一起。

                WNDPROC lpfnWndProc;//窗口处理函数的指针。

                int cbClsExtra; //指定紧跟在窗口类结构后的附加字节数。

                int cbWndExtra; //指定紧跟在窗口实例的附加字节数。如果一个应用程序在资源中用CLASS伪指令注册一个对话框类时,则必须把这个成员设成DLGWINDOWEXTRA。

                HINSTANCE hInstance; //本模块的实例句柄。

                HICON hIcon; //图标的句柄。

                HCURSOR hCursor; //光标的句柄。

                HBRUSH hbrBackground; //背景画刷的句柄。

                LPCTSTR lpszMenuName; //指向菜单的指针。

                LPCTSTR lpszClassName; //指向类名称的指针。

                HICON hIconSm; //和窗口类关联的小图标。如果该值为NULL。则把hIcon中的图标转换成大小合适的小图标。

                } WNDCLASSEX, *PWNDCLASSEX;

                */

                 WNDCLASSEX wce{};//增强版WNDCLASS

                wce.cbSize = sizeof(wce);

                wce.style = CS_HREDRAW | CS_VREDRAW ;

                 /*

                DefWindowProc 这个函数是默认的窗口处理函数,我们可以把不关心的消息都丢给它来处理。

                这个函数在处理关闭窗口消息WM_CLOSE时,是调用DestroyWindow函数关闭窗口并且发WM_DESTROY消息给应用程序;而它对WM_DESTROY这个消息是不处理的(考虑为什么?);

                我们在应用程序中对这个消息的处理是发出WM_QUIT消息。因此WM_CLOSE、WM_DESTROY、WM_QUIT这三个消息是先后产生的。


                hWnd:指向接收消息的窗口过程的句柄。

                Msg:指定消息类型。

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

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

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


                DefWindowProc // 默认的窗口消息处理程序

                */

                 //wce.lpfnWndProc = hInstance;

                wce.lpfnWndProc = DefWindowProc;

                wce.cbClsExtra = 0;

                wce.cbWndExtra = 0;

                wce.hInstance = hInstance;

                wce.hIcon = NULL;

                wce.hCursor = NULL;

                wce.hbrBackground = GetSysColorBrush( COLOR_3DFACE);

                wce.lpszMenuName = NULL;

                wce.lpszClassName = myLpszClassName;

                wce.hIconSm = NULL;

                 ATOM nAtom = RegisterClassEx (&wce);

                 if (nAtom == 0){

                                 MessageBox(NULL , _T("注册失败"), _T("错误信息" ), MB_OK);

                                 return 0;

                }

                 /*

                WND CreateWindowEx(

                 _In_       DWORD DdwExStyle,        //窗口的扩展风格

                _In_opt  LPCTSTR lpClassName,    //指向注册类名的指针

                _In_opt  LPCTSTR lpWindowName,   //指向窗口名称的指针

                 _In_       DWORD dwStyle,          //窗口风格

                 _In_       int x,                  //窗口的水平位置

                 _In_       int y,                  //窗口的垂直位置

                 _In_       int nWidth,             //窗口的宽度

                 _In_       int nHeight,            //窗口的高度

                 _In_opt_              HWND hWndParent,        //父窗口的句柄

                 _In_opt_              HMENU hMenu,            //菜单的句柄或是子窗口的标识符

                 _In_opt_              HINSTANCE hInstance,    //应用程序实例的句柄

                 _In_opt_              LPVOID lpParam          //指向窗口的创建数据

                );


                */

                 HWND mainHWnd = CreateWindowEx (WS_EX_ACCEPTFILES, myLpszClassName, myWndTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT , CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL , NULL, hInstance, NULL);

                 CreateWindowEx(WS_EX_ACCEPTFILES ,

                                myLpszClassName,

                                myWndTitle,

                                 WS_OVERLAPPEDWINDOW,

                                 CW_USEDEFAULT,

                                 CW_USEDEFAULT,

                                 CW_USEDEFAULT,

                                 CW_USEDEFAULT,

                                mainHWnd,

                                 NULL,

                                 hInstance,

                                 NULL);


                 /*

                该函数设置指定窗口的显示状态。

                hWnd:指窗口句柄。

                nCmdShow:指定窗口如何显示。

                */

                ShowWindow(mainHWnd, SW_SHOW);


                 MSG nMsg {};

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

                {

                                TranslateMessage(&nMsg);

                                 DispatchMessage(&nMsg);

                }

                 return TRUE ;

}


  


你可能感兴趣的:(Win32,应用程序,CreateWindowEx,窗口程序,WNDCLASSEX)