GUI 剖析 之第一个windows程序

本文介绍了一个简单的Windows应用程序示例,演示了如何使用Windows API创建窗口、显示消息并响应基本的窗口事件。

三)、第一个windows程序

现在进入正题,让我们与代码进行交流吧。

代码粘贴:

#include <windows.h>

#include <mmsystem.h> // 加上,不然PlaySound函数无法使用

#pragma comment(lib, "WINMM.LIB") // 加上,不然PlaySound函数无法使用      

 

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

//窗口过程回调函数,

       

 

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

       

                   PSTR szCmdLine, int iCmdShow)

       

{

       

    static TCHAR szAppName[] = TEXT ("HelloWin") ;

       

    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) ;//载入图标,你也可以这样定义自己的图标LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));

       

  wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW) ;//载入光标,你也可以这样定义自己的光标LoadCursor(hInstance,MAKEINTRESOURCE(IDC_CURSOR1));

       

   wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;//定义画刷,这里的WHITE_BRUSH还可以换为BLACK_BRUSH,仅此而已

       

  wndclass.lpszMenuNam  = NULL ;//无菜单,你也可以载入菜单MAKEINTRESOURCE(IDC_GDI);

       

    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 ("The Hello Program"),   // window caption

       

                   WS_OVERLAPPEDWINDOW,  // window style

       

                   CW_USEDEFAULT,// initial x position

       

                   CW_USEDEFAULT,// initial y position

       

                   CW_USEDEFAULT,// initial x size

       

                   CW_USEDEFAULT,// initial y size

       

                   NULL,                 // parent window handle

       

               NULL,            // window menu handle

       

               hInstance,   // program instance handle

       

               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 ;

//定义一个设备上下文句柄,这个设备上下文句柄其实是内存块的标识,当我们要对某个设备进行操作时,首先都要打开该设备,让后确认在哪个设备上进行何种操作,一般地,hdc与绘制消息相关,如果感觉有点模糊,现在不要想太多,只要记住您要绘制什么东西的时候就必须用它,以后还会详谈。

       

    PAINTSTRUCT ps ;

       

    RECT          rect ;

       

  

       

    switch (message)

       

    {

       

    case WM_CREATE://进入窗口过程所响应的第一个消息

       

    PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;

       

            return 0 ;

       

 

    case   WM_PAINT://绘制消息,建议以后编程所有有关绘制的动作都在这个消息里面执行

       

            hdc = BeginPaint (hwnd, &ps) ;

       

       

       

            GetClientRect (hwnd, &rect) ;

       

       

       

            DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,

       

                   DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

       

                 EndPaint (hwnd, &ps) ;

       

                   return 0 ;

       

       

       

    case   WM_DESTROY://销毁窗口消息,当窗口销毁自动执行该消息

       

            PostQuitMessage (0) ;//此API执行退出窗口,也可以用DestroyWindow(hWnd),此API内部调用PostQuitMessage (0)

       

            return 0 ;

    }

        //缺省的消息处理过程,windows已经在内部做好了

  return DefWindowProc (hwnd, message, wParam, lParam) ;

       

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值