设为首页 加入收藏

TOP

五、GDI映像方式—WHATSIZE程序
2012-11-05 12:25:03 】 浏览:485
Tags:GDI 映像 方式 WHATSIZE 程序

Windows的小历史:第一篇如何写作Windows程序的介绍文章出现在《Microsoft Systems Journal》1986年12月号上。在那篇文章中,范例程序叫做WSZ(「what size:什么尺寸」),它以图素、英寸和毫米为单位显示了显示区域的大小。那个程序的更简易版本是WHATSIZE,如程序5-6所示。程序显示了以五种度量映像方式显示的窗口显示区域的大小。

程序5-6  WHATSIZE        WHATSIZE.C        /*------------------------------------------------------------          WHATSIZE.C -- What Size is the Window                    (c) Charles Petzold, 1998        ----------------------------------------------------------*/        #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 ("WhatSize") ;            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, TEXT ("What Size is the Window "),                                   WS_OVERLAPPEDWINDOW,                                  CW_USEDEFAULT, CW_USEDEFAULT,                                   CW_USEDEFAULT, CW_USEDEFAULT,                                   NULL, NULL, hInstance, NULL) ;                       ShowWindow (hwnd, iCmdShow) ;            UpdateWindow (hwnd) ;            while (GetMessage (&msg, NULL, 0, 0))            {                    TranslateMessage (&msg) ;                    DispatchMessage (&msg) ;            }            return msg.wParam ;        }        void Show (HWND hwnd, HDC hdc, int xText, int yText, int iMapMode,                    TCHAR * szMapMode)        {            TCHAR szBuffer [60] ;            RECT  rect ;                       SaveDC (hdc) ;            SetMapMode (hdc, iMapMode) ;            GetClientRect (hwnd, &rect) ;            DPtoLP (hdc, (PPOINT) &rect, 2) ;                       RestoreDC (hdc, -1) ;            TextOut (     hdc, xText, yText, szBuffer,                          wsprintf (szBuffer, TEXT ("%-20s %7d %7d %7d %7d"), szMapMode,                           rect.left, rect.right, rect.top, rect.bottom)) ;        }        LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)        {            static TCHAR szHeading [] =                    TEXT ("Mapping Mode   Left   Right  Top  Bottom") ;            static TCHAR szUndLine [] =                    TEXT ("------------   ----   -----   ---  ------") ;            static int   cxChar, cyChar ;            HDC           hdc ;            PAINTSTRUCT   ps ;            TEXTMETRIC    tm ;                       switch (message)            {            case   WM_CREATE:                    hdc = GetDC (hwnd) ;                    SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;                                    GetTextMetrics (hdc, &tm) ;                    cxChar = tm.tmAveCharWidth ;                    cyChar = tm.tmHeight + tm.tmExternalLeading ;                                    ReleaseDC (hwnd, hdc) ;                    return 0 ;                            case   WM_PAINT:                    hdc = BeginPaint (hwnd, &ps) ;                    SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;                    SetMapMode (hdc, MM_ANISOTROPIC) ;                    SetWindowExtEx (hdc, 1, 1, NULL) ;                    SetViewportExtEx (hdc, cxChar, cyChar, NULL) ;                                    TextOut (hdc, 1, 1, szHeading, lstrlen (szHeading)) ;                    TextOut (hdc, 1, 2, szUndLine, lstrlen (szUndLine)) ;                                    Show (hwnd, hdc, 1, 3, MM_TEXT,      TEXT ("TEXT (pixels)")) ;                    Show (hwnd, hdc, 1, 4, MM_LOMETRIC,  TEXT ("LOMETRIC (.1 mm)")) ;                    Show (hwnd, hdc, 1, 5, MM_HIMETRIC,  TEXT ("HIMETRIC (.01 mm)")) ;                    Show (hwnd, hdc, 1, 6, MM_LOENGLISH, TEXT ("LOENGLISH (.01 in)")) ;                    Show (hwnd, hdc, 1, 7, MM_HIENGLISH,TEXT ("HIENGLISH (.001 in)")) ;                    Show (hwnd, hdc, 1, 8, MM_TWIPS,     EXT ("TWIPS (1/1440 in)")) ;                                    EndPaint (hwnd, &ps) ;                    return 0 ;                            case   WM_DESTROY:                    PostQuitMessage (0) ;                    return 0 ;            }            return DefWindowProc (hwnd, message, wParam, lParam) ;        }        
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇六、矩形、区域和剪裁 下一篇五、GDI映像方式—MM_ANISOTROPIC..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目