MFC(一)——Windows程序内部运行原理

来源:互联网 发布:我是歌手4网络踢馆赛 编辑:程序博客网 时间:2024/05/16 17:38

消息结构体

typedef struct tagMSG{    HWND hwnd;    UINT message;    WPARAM wParam;    LPARAM lParam;    DWORD time;    POINT pt;} MSG, *pMSG;

WinMain入口函数

int WINAPI WinMain(    HINSTANCE hInstance,    HINSTANCE hPreInstance,    LPSTR lpCmdLine,    int nCmdShow);

窗口的创建

  • 设计一个窗口类
  • 注册窗口类
  • 创建窗口
  • 显示及更新窗口
#include <windows.h>#include <stdio.h>LRESULT CALLBACK WinSumProc(    HWND hwnd,    UINT uMsg,    WPARAM wParam,    LPARAM lParam);int WINAPI WinMain(    HINSTANCE hInstance,    HINSTANCE hPreInstance,    LPSTR lpCmdLine,    int nCmdShow) {    WNDCLASS wndcls;    wndcls.cbClsExtra = 0;    wndcls.cbWndExtra = 0;    wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);    wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);    wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);    wndcls.hInstance = hInstance;    wndcls.lpfnWndProc = WinSumProc;    wndcls.lpszClassName = "Flaming";    wndcls.lpszMenuName = NULL;    wndcls.style = CS_HREDRAW | CS_VREDRAW;    RegisterClass(&wndcls);    HWND hwnd;    hwnd = CreateWindow("Flaming", "Hello,World", WS_OVERLAPPEDWINDOW, 0, 0, 600, 400, NULL, NULL, hInstance, NULL);    ShowWindow(hwnd, SW_SHOWNORMAL);    UpdateWindow(hwnd);    MSG msg;    while (GetMessage(&msg, NULL, 0, 0)) {        TranslateMessage(&msg);        DispatchMessage(&msg);    }    return 0;}LRESULT CALLBACK WinSumProc(    HWND hwnd,    UINT uMsg,    WPARAM wParam,    LPARAM lParam) {    switch (uMsg) {    case WM_CHAR:        char szChar[20];        sprintf(szChar, "char is %d", wParam);        MessageBox(hwnd, szChar, "Flaming", 0);        break;    case WM_LBUTTONDOWN:        MessageBox(hwnd, "mouse clicked", "Flaming", 0);        HDC hdc;        hdc = GetDC(hwnd);        TextOut(hdc, 0, 50, "Hello,world", strlen("Hello,world"));        ReleaseDC(hwnd, hdc);        break;    case WM_PAINT:        HDC hDC;        PAINTSTRUCT ps;        hDC = BeginPaint(hwnd, &ps);        TextOut(hDC, 0, 0, "Hello!", strlen("Hello!"));        EndPaint(hwnd, &ps);        break;    case WM_CLOSE:        if (IDYES == MessageBox(hwnd, "是否真的结束?", "Flaming", MB_YESNO)) {            DestroyWindow(hwnd);        }        break;    case WM_DESTROY:        PostQuitMessage(0);        break;    default:        return DefWindowProc(hwnd, uMsg, wParam, lParam);    }    return 0;}
0 0
原创粉丝点击