您的位置:首页 > 编程语言

第一次Windows编程实验代码及感悟

2017-03-03 15:21 337 查看
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

    LPSTR lpCmdLine, int nCmdShow)

{

    MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK);

    return 0;

}

最简单的win32程序也是我第一次windows的代码!代码虽短,但是完全看不懂,怀疑自己是不是学过C语言!渐渐的学下去才知道有关的东西:

1)WinMain()是Windows中与DOS或UNIX的main()的等价物.2)HINSTANCE hInstance程序可执行模块的句柄(內存中的.exe文件).3)HINSTANCE hPrevInstance在Win32程序中总是为NULL. 4)LPSTR lpCmdLine命令行参数组成的一个单字符串.不包括程序名字. 5)int nCmdShow一个将要传递给ShowWindow()的整数

知道了一些关键字或类型在windows中的等价类型;比如:UINT是unsigned int,LPSTR是char*并且二者之间的转换也是可以的。

********************************

#include <windows.h>

const char g_szClassName[] = "myWindowClass";

// Step 4: the Window Procedure

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

    switch(msg)

    {

        case WM_CLOSE:

            DestroyWindow(hwnd);

        break;

        case WM_DESTROY:

            PostQuitMessage(0);

        break;

        default:

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

    }

    return 0;

}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

    LPSTR lpCmdLine, int nCmdShow)

{

    WNDCLASSEX wc;

    HWND hwnd;

    MSG Msg;

    //Step 1: Registering the Window Class

    wc.cbSize        = sizeof(WNDCLASSEX);

    wc.style         = 0;

    wc.lpfnWndProc   = WndProc;

    wc.cbClsExtra    = 0;

    wc.cbWndExtra    = 0;

    wc.hInstance     = hInstance;

    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);

    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);

    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

    wc.lpszMenuName  = NULL;

    wc.lpszClassName = g_szClassName;

    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

    if(!RegisterClassEx(&wc))

    {

        MessageBox(NULL, "Window Registration Failed!", "Error!",

            MB_ICONEXCLAMATION | MB_OK);

        return 0;

    }

    // Step 2: Creating the Window

    hwnd = CreateWindowEx(

        WS_EX_CLIENTEDGE,

        g_szClassName,

        "The title of my window",

        WS_OVERLAPPEDWINDOW,

        CW_USEDEFAULT, CW_USEDEFAULT, 240, 240,

        NULL, NULL, hInstance, NULL);

    if(hwnd == NULL)

    {

        MessageBox(NULL, "Window Creation Failed!", "Error!",

            MB_ICONEXCLAMATION | MB_OK);

        return 0;

    }

    ShowWindow(hwnd, nCmdShow);

    UpdateWindow(hwnd);

    // Step 3: The Message Loop消息循环

    while(GetMessage(&Msg, NULL, 0, 0) > 0)

    {

        TranslateMessage(&Msg);

        DispatchMessage(&Msg);

    }

    return Msg.wParam;

}

 

一个简单的串口;虽然是参考的代码(共有76行),但是自己能运行出来并且确实看到了一个小的窗口似乎还有点成就感



然后就是分布的学习:第一步注册窗口类,第二步创建窗口,第三步消息循环,第四步则是窗口过程。然后发现了第五步:没有第五步,这个地方最为有趣,感觉程序员的一种玩笑,让我可以在枯燥的学习中有了继续学习的动力,让我放松!

*********************

接着是更加深入一点的学习;就是相较于上一个程序加入了一些代码:

      case WM_LBUTTONDOWN:    // <-

// BEGIN NEW CODE

        {

            char szFileName[MAX_PATH];

            HINSTANCE hInstance = GetModuleHandle(NULL);

            GetModuleFileName(hInstance, szFileName, MAX_PATH);

            MessageBox(hwnd, szFileName, "This program is:", MB_OK | MB_ICONINFORMATION);

        }

// END NEW CODE

                        // <-     we just added this stuff

      break;                  // <-

用左键点击多了一个.exe的对话框,虽然是简单的程序添加,但是让我感觉到学习并不是一蹴而就的,总是要一点点的堆积,一点点的深入!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: