Win32编程初步

Windows应用程序开发笔记

Win32 Application开发步骤

1.       包含开发头文件如Windows.hstdio.h以及其他头文件

 

2.       定义宏 #define 变量

 

3.       确定消息处理函数,可以是一个或者多个消息处理函数 如:

声明处理函数:LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

 

4.       Win32程序入口是WinMain()函数 如:

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
  
  

 

5.       窗口类定义 WNDCLASS wndclas,并且给窗口类赋值

 

       

    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) ;//窗口背景,这里的返回值不是HBRUSH,所以需要在前面进行强制转换

       

    wndclass.lpszMenuName= NULL ;//菜单名

       

    wndclass.lpszClassName= szAppName ;//窗口类名,以及窗口名

 

 

 

6.       注册窗口类

if (!RegisterClass (&wndclass))

       

    {

       

            MessageBox (  NULL, TEXT ("This program requires Windows NT!"),

       

                                         szAppName, MB_ICONERROR) ;

       

            return 0 ;

       

    }

 

7.       定义窗口实例句柄HWND  hwnd,并建立窗口

 hwnd = CreateWindow (szAppName, TEXT ("Device Capabilities"),

       

                    WS_OVERLAPPEDWINDOW,

       

                    CW_USEDEFAULT, CW_USEDEFAULT,

       

                    CW_USEDEFAULT, CW_USEDEFAULT,

       

                        NULL, NULL, hInstance, NULL) ;

       

8.       显示窗口   ShowWindow (hwnd, iCmdShow) ;

 

9.       更新窗口   UpdateWindow (hwnd) ;

 

10.   消息队列循环

    while (GetMessage (&msg, NULL, 0, 0))  //从消息队列中取得消息

       

    {

            TranslateMessage (&msg) ;//转译消息,将KEY_DOWN等消息转换为WM_CHAR或其他消息

       

            DispatchMessage (&msg) ;//分发消息给消息处理函数

       

    }

11.返回消息发生的位置或者其他参数给WinMain() 函数   return msg.wParam ;到这里WinMain函数就结束了。

 

 

11.   接下来就要定义消息处理函数了,前面我已经声明了。

LRESULT  CALLBACK  WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
  
  
    static int    cxChar, cxCaps, cyChar ;
  
  
        
  
  
    TCHAR         szBuffer[10] ;
  
  
        
  
  
    HDC           hdc ;//图形设备句柄
  
  
        
  
  
    int           i ;
  
  
        
  
  
    PAINTSTRUCT   ps ; 在画图中的一个参数
  
  
        
  
  
    TEXTMETRIC    tm ;
  
  
        
  
  
   
  
  
        
  
  
    switch (message)  //消息处理结构
  
  
        
  
  
    {
  
  
        
  
  
    case WM_CREATE://窗口创建消息
  
  
        
  
  
            hdc = GetDC (hwnd) ;
  
  
        
  
  
            GetTextMetrics (hdc, &tm) ;
  
  
        
  
  
            cxChar= tm.tmAveCharWidth ;
  
  
        
  
  
            cxCaps= (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2 ;
  
  
        
  
  
            cyChar= tm.tmHeight + tm.tmExternalLeading ;
  
  
        
  
  
        
  
  
        
  
  
            ReleaseDC (hwnd, hdc) ;
  
  
        
  
  
            return 0 ;
  
  
        
  
  
        
  
  
        
  
  
    case WM_PAINT:  //窗口绘制消息
  
  
        
  
  
            hdc = BeginPaint (hwnd, &ps) ;
  
  
        
  
  
            for (i = 0 ; i < NUMLINES ; i++)
  
  
        
  
  
            {
  
  
        
  
  
                   TextOut (     hdc, 0, cyChar * i,
  
  
        
  
  
                           devcaps[i].szLabel,
  
  
        
  
  
                           lstrlen (devcaps[i].szLabel)) ;
  
  
        
  
  
             
  
  
        
  
  
                   TextOut (     hdc, 14 * cxCaps, cyChar * i,
  
  
        
  
  
                           devcaps[i].szDesc,
  
  
        
  
  
                           lstrlen (devcaps[i].szDesc)) ;
  
  
        
  
  
             
  
  
        
  
  
                   SetTextAlign (hdc, TA_RIGHT | TA_TOP) ;
  
  
        
  
  
                   TextOut (hdc, 14*cxCaps+35*cxChar, cyChar*i, szBuffer,
  
  
        
  
  
                           wsprintf (szBuffer, TEXT ("%5d"),
  
  
        
  
  
                           GetDeviceCaps (hdc, devcaps[i].iIndex))) ;
  
  
        
  
  
             
  
  
        
  
  
            SetTextAlign (hdc, TA_LEFT | TA_TOP) ;
  
  
        
  
  
            }
  
  
        
  
  
        
  
  
        
  
  
            EndPaint (hwnd, &ps) ;
  
  
        
  
  
            return 0 ;
  
  
        
  
  
       
  
  
        
  
  
    case WM_DESTROY://窗口销毁消息
  
  
        
  
  
            PostQuitMessage (0) ;
  
  
        
  
  
            return 0 ;
  
  
        
  
  
    }
  
  
        
  
  
    return DefWindowProc (hwnd, message, wParam, lParam) ;//系统默认消息处理
  
  
        
  
  
}
  
  

到这里就介绍了基本的Win32程序的开发步骤,至于其他还要继续学习。第一课我就讲到这里了,这是我边学边讲,不到之处还请原谅。

 

 

下面讲下在程序中常用的函数:

BeginPaint()EndPaint//图形设备调用和销毁

GetDC()ReleaseDC()  //适用与非WM_PAINT消息

CreateDC()DeleteDC()

TextOut//输出文字

MessageBox//消息对话框

DrawText//文字输出

GetSystemMetrics

GetTextMetrics取得文字属性

InvalidateRect使对象区域无效,一边重新产生WM_PAINT消息

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值