c语言写的简单Windows窗口

来源:互联网 发布:access数据库表的关联 编辑:程序博客网 时间:2024/05/21 04:39


这是一个用c语言写的简单的windows窗口的创建,以及添加了一个按钮显示功能。

#include

const char g_szClassName[] = "myWindowClass";  //注册窗口类

// Step 5: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)//处理信息
{
    switch(msg)
    {
        case WM_LBUTTONDOWN:
        {
            char szFileName[MAX_PATH];
            HINSTANCE hInstance = GetModuleHandle(NULL);

            GetModuleFileName(hInstance, szFileName, MAX_PATH);
            MessageBox(hwnd, szFileName, "This program is:", MB_OK | MB_ICONINFORMATION);
        }
        break; //添加按钮的处理
       
        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, //程序可执行的句柄(.exe)

                                      HINSTANCE hPrevInstance, //取值为NULL
                                      LPSTR lpCmdLine, //命令行参数指定的一个单字符串

                                      int nCmdShow //将要传递给showwindow()的整数//程序开始执行的入口,以及输入的参数(主程序)
{
    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, 340, 220,
        NULL, NULL, hInstance, NULL);

if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

// Step 3:show and dedate the window

ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

// Step 4: The Message Loop
    while(GetMessage(&Msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&Msg); // 翻译消息
        DispatchMessage(&Msg); //撤去消息
    }
    return Msg.wParam; //终止应用
}

 

windows编程中至少需要两个函数:WinMain() (windows 主程序),WndProc() (窗口过程函数)

Dos与Windows驱动机制的区别:

DOS程序主要使用顺序的,过程驱动的程序设计方法。顺序的,过程驱动的程序有一个明显的开始,明显的过程及一个明显的结束,因此程序能直接控制程序事件或过程的顺序。虽然在顺序的过程驱动的程序中也有很多处理异常的方法,但这样的异常处理也仍然是顺序的,过程驱动的结构。

而Windows的驱动方式是事件驱动,就是不由事件的顺序来控制,而是由事件的发生来控制,所有的事件是无序的,所为一个程序员,在你编写程序时,你并不知道用户先按哪个按纽,也不知道程序先触发哪个消息。你的任务就是对正在开发的应用程序要发出或要接收的消息进行排序和管理。事件驱动程序设计是密切围绕消息的产生与处理而展开的,一条消息是关于发生的事件的消息。

0 0
原创粉丝点击