zapline 发表于 2009-2-7 15:01

win程序设计笔记2

:( 为了不被鄙视而学习
:( 为了将来工作而学习

书中的例程HELLOWIN.C
/*------------------------------------------------------------------------
           HELLOWIN.C -- Displays "Hello, Windows 98!" in client area
                      (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 ("HelloWin") ;
        HWND        hwnd ;
        MSG        msg ;
        WNDCLAS        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.lpszMenuNam        = 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 ("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 ;
        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) ;
                return 0 ;
   }
   return DefWindowProc (hwnd, message, wParam, lParam) ;
}其中三处地方要注意
1,WNDCLAS        wndclass ;
少了个S
2,wndclass.lpszMenuNam        = NULL ;
少了个e
3,PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
不删除此句则应该添加 WINMM.LIB

字首类别
CS 视窗类别样式
CW 建立视窗
DT 绘制文字
IDI 图示ID
IDC 游标ID
MB 讯息方块
SND 声音
WM 视窗讯息
WS 视窗样式

结构含义
MSG 讯息结构
WNDCLASS 视窗类别结构
PAINTSTRUCT 绘图结构
RECT 矩形结构

识别字含义
HINSTANCE 执行实体(程式自身)代号
HWND 视窗代号
HDC 装置内容代号

字首资料型态
c char或WCHAR或TCHAR
by BYTE (无正负号字元)
n short
i int
x, y int分别用作x座标和y座标
cx, cy int分别用作x长度和y长度;C代表「计数器」
b或f BOOL (int);f代表「旗标」
w WORD (无正负号短整数)
l LONG (长整数)
dw DWORD (无正负号长整数)
fn function(函式)
s string(字串)
sz 以位元组值0结尾的字串
h 代号
p 指标

WNDCLASSA结构

ASCII版:
typedef struct tagWNDCLASSA
{
        UINT             style ;
        WNDPROC             lpfnWndProc ;
        int              cbClsExtra ;
        int                 cbWndExtra ;
        HINSTANCE        hInstance ;
        HICON             hIcon ;
        HCURSOR        hCursor ;
        HBRUSH              hbrBackground ;
        LPCSTR       lpszMenuName ;
        LPCSTR       lpszClassName ;
}
WNDCLASSA, * PWNDCLASSA, NEAR * NPWNDCLASSA, FAR * LPWNDCLASSA ;

Unicode版:
typedef struct tagWNDCLASSW
{
           UINT                  style ;
           WNDPROC           lpfnWndProc ;
           int                 cbClsExtra ;
           int                 cbWndExtra ;
           HINSTANCE           hInstance ;
           HICON               hIcon ;
           HCURSOR           hCursor ;
           HBRUSH              hbrBackground ;
           LPCWSTR           lpszMenuName ;
           LPCWSTR           lpszClassName ;
}
WNDCLASSW, * PWNDCLASSW, NEAR * NPWNDCLASSW, FAR * LPWNDCLASSW ;

创建一个窗口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) ;
}MSG结构:
typedef struct tagMSG
{
        HWND        hwnd ;
        UINT        message ;
        WPARAM         wParam ;
        LPARAM         lParam ;
        DWORD        time ;
        POINT        pt ;
}
MSG, * PMSG ;

POINT结构:
typedef struct tagPOINT
{
        LONGx ;
        LONGy ;
}
POINT, * PPOINT;

[ 本帖最后由 zapline 于 2009-2-7 15:06 编辑 ]

Peace 发表于 2009-2-7 15:39

真勤快;以后工作不用愁啦;呵呵;鼓励!

iawen 发表于 2009-2-7 15:44

确实勤快,不过笔记不要记得太泛了!

笔记应该记一些疑难点与容易出错的地方,不要泛泛而谈的好,呵呵;P

boss1940 发表于 2009-2-9 04:48

什么东西~~
看不懂

wqejnyt 发表于 2009-2-9 08:32

看了之后。那是相当的晕。。。小Z太强了!!
页: [1]
查看完整版本: win程序设计笔记2