Windows-SDK-UI之主窗体

一、原理


一个windows对话框程序分为三部分:

  1. 入口函数;
  2. 对话框资源;

    • resource.h;
    • 控件ID和消息传递时的对应关系。
  3. 对话框创建过程。

图片无法显示

windows对话框程序的生命周期

二、程序


  1. windows窗口创建过程
    xx.cpp
#include <stdafx.h>
#include <Windows.h>


LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

//定义GUI程序入口函数
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR lpCmdLine, int nShowCmd)
{
    //得到程序当前实例的句柄:
    hInstance = GetModuleHandle(NULL);
    nShowCmd = SW_SHOW;

    //定义程序实例的窗口类:实际窗口以此为模版创建
    static THCAR szAppName[] = TEXT("WindowsUI");
    WNDCLASS wndclass;

    wndclass.style = CS_HREDRAW | CS_VREDRAW;//当外部动作导致窗口高度和宽度变化,重绘之
    wndclass.lpfnWndProc = wndProc;//指向窗口过程的指针
    wndclass.cbClsExtra = 0;//window类结构后分配的内存大小
    wndclass.cbWndExtra = 0;//window实例后分配的内存大小
    wndclass.hInstance = hInstance;//包含类窗口过程的实例句柄
    wndclass.hIcon = LoadIcon(NULL, (LPCTSTR)ID_ICON); 
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = szAppName;//菜单资源的名字
    wndclass.lpszClassName = szAppName;//定义窗口类名

    //注册窗口类:把窗口过程(本例中为wndProc)和窗口类型信息同要登记的窗口类(wndclass)关联起来,同时存取atom表
    if (!RegisterClass(&wndclass))
        {
        MessageBox(NULL, TEXT("This program requires NT!"), szAppName, MB_ICONERROR);
            return 0;
        }

//返回新窗口句柄或空(创建失败时)
    hwnd = CreateWindow(szAppName,/*窗口类名*/
            TEXT("TBioslogo"),/*窗口标题*/
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT,/*窗口初始水平位置.忽略*/
            CW_USEDEFAULT,/*窗口初始垂直位置.忽略*/
            CW_USEDEFAULT,/*窗口宽度*/
            CW_USEDEFAULT,/*窗口高度*/
            NULL,
            NULL,/*菜单句柄。使用了菜单类,为NULL*/
            hInstance,/*与窗口相关联的模块实例句柄*/
            NULL/*传递给窗口WM_CREATE消息*/);
    ShowWindow(hwnd, nShowCmd); 
    UpdateWindow(hwnd);

    while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }

    return 0;
}

窗口处理函数
xx.h

#include "stdafx.h"
#include<windows.h>

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;
    static HINSTANCE hInstance;
    switch (message)
    {
    case WM_CREATE:
    hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
    return 0;

    case WM_COMMAND:
    switch (LOWORD(wParam))
        { 
        case ID_FILE_OPEN:
        case ID_TODO_ALL:
            DialogBox(hInstance, TEXT("AboutBox"),MAKEINTRESOURCE(IDD_DIALOG2), hwnd, (DLGPROC)AboutDlgProc);
        case IDM_APP_ABOUT:
        DialogBox(hInstance, /*TEXT("AboutBox")*/(LPCTSTR)AboutBox, hwnd, (DLGPROC)AboutDlgProc);

            break;


        case ID_APP_EXIT:
            DestroyWindow(hwnd);
            break;
        }
        return 0;

    case WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);
        GetClientRect(hwnd, &rect);
        DrawText(hdc, TEXT(""), -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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值