Windows程序设计编写一个简单的窗体exe

效果:

代码:

#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
        
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] = TEXT ("HelloMsg") ;  
    HWND   hwnd ;
    MSG    msg ;
    WNDCLASS wndclass ;
	wndclass.style        = CS_HREDRAW | CS_VREDRAW ;
	wndclass.lpfnWndProc  = WndProc ;
    wndclass.cbClsExtra   = 0 ;
    wndclass.cbWndExtra   = 0 ;
    wndclass.hInstance    = hInstance ;
    wndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION) ;
	wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW) ; 
	wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ; 
	wndclass.lpszMenuName  = NULL; 
    wndclass.lpszClassName= szAppName ;
    if (!RegisterClass (&wndclass))
    {
            MessageBox (NULL, TEXT ("This program requires Windows NT!"),szAppName, MB_ICONERROR) ;
            return 0 ;
    }
    hwnd = CreateWindow( szAppName,      // window class name
	TEXT ("窗口标题示例"),   // 窗口标题
	WS_OVERLAPPEDWINDOW,  // 窗口样式
	CW_USEDEFAULT,// 初始x坐标
	CW_USEDEFAULT,// 厨师y坐标
	CW_USEDEFAULT,// 初始宽度
	CW_USEDEFAULT,// 初始高度
	NULL,                 // 父窗口句柄
	NULL,            // 窗口句柄
	hInstance,   // 当前实例
	NULL) ;      // creation parameters
	//显示窗口
    ShowWindow (hwnd, iCmdShow) ;
    //自动更新窗口
    UpdateWindow (hwnd) ;
    //从消息队列循环取出消息
    while (GetMessage (&msg, NULL, 0, 0)) 
    {
		TranslateMessage (&msg) ;
		DispatchMessage (&msg) ;
    }
    return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
        
{
        
    HDC                   hdc ;
    PAINTSTRUCT ps ;
    RECT          rect ;
    switch (message)
    {
    case WM_CREATE:
		//窗口创建后要执行的代码

            return 0 ;
    case   WM_PAINT:
        
            hdc = BeginPaint (hwnd, &ps) ;
            GetClientRect (hwnd, &rect) ;
            DrawText (hdc, TEXT ("这是第一个窗口应用"), -1, &rect,
                   DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
                 EndPaint (hwnd, &ps) ;
        
                   return 0 ;
    
    case   WM_DESTROY:
			//窗口销毁消息
            PostQuitMessage (0) ;//发送退出消息
            return 0 ;
    }
	return DefWindowProc (hwnd, message, wParam, lParam) ;   
}

解释:

Windows API编程,窗体创建的顺序是在WinMain()入口函数中创建窗口类,类中会设定窗口样式、标题、窗口位置、大小等信息。

Windows窗体应用使用消息机制工作,Windows应用程序之间以及操作系统和应用程序之间以消息的形式通信。

需要循环从消息队列中取出消息解析处理,WndProc()函数中使用switch语句对接收到的消息进行分类处理。

这么长的代码,写起来很费事,不好记住,也不用记住,没有人能真正记住此程序的全部写法;通常,Windows程序写作者在开始写一个新程序时总是会复制一个现有的程序,然后再做相应的修改。

奉劝开发人员(尤其是初学者)不要费力气去记忆Windows程序设计中的数值常数。实际上,Windows中使用的每个数值常数在表头文件中均有相应的标识符定义。目前市面上大部分关于Windows编程的书籍资料以及教学资料都没有对这些函数、结构及常数做过说明,导致初学者很难靠买来的书籍入门。
 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值