~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

##

#include <windows.h>
#include <tchar.h>

HINSTANCE hInst;

ATOM WindowRegister(WNDPROC lpfnWndProc, char *lpClname, HBRUSH hbrBack)
{
    WNDCLASSEX wnd;
    wnd.cbClsExtra = 0;
    wnd.cbSize = sizeof(WNDCLASSEX);
    wnd.cbWndExtra = 0;
    wnd.hbrBackground = hbrBack;
    wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
    wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wnd.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    wnd.hInstance = hInst;
    wnd.lpfnWndProc = lpfnWndProc;
    wnd.lpszClassName = lpClname;
    wnd.lpszMenuName = NULL;
    wnd.style = CS_HREDRAW | CS_VREDRAW;
    return RegisterClassEx(&wnd);
}

LRESULT CALLBACK ClientProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    HWND hWndEdit;
    RECT rect;
    switch (uMsg)
    {
    case WM_CREATE:        
        GetClientRect(hWnd, &rect);
        hWndEdit = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("Edit"), NULL,
            WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_MULTILINE,
            0, 0, rect.right, rect.bottom, hWnd, NULL, hInst, NULL);
        return 0;
    case WM_SIZE:
        hWndEdit = GetWindow(hWnd, GW_CHILD);

        GetClientRect(hWnd, &rect);
        SetWindowPos(hWndEdit, NULL, 0, 0, rect.right, rect.bottom, SWP_NOMOVE | SWP_NOZORDER);
        break;
    case WM_MDIACTIVATE:
        return 0;
    }

    return DefMDIChildProc(hWnd, uMsg, wParam, lParam);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static HWND hClient;
    HMENU hMenu;
    MDICREATESTRUCT mdic;
    CLIENTCREATESTRUCT ccs;
    HWND hChild;

    switch (uMsg)
    {
    case WM_CREATE:
        WindowRegister(ClientProc, _T("Client"), (HBRUSH)GetStockObject(WHITE_BRUSH));
        hMenu = CreateMenu();
        AppendMenu(hMenu, MF_STRING, 1000, _T("New(&N)"));
        SetMenu(hWnd, hMenu);

        ccs.hWindowMenu = NULL;
        ccs.idFirstChild = 100;

        hClient = CreateWindow(_T("MDICLIENT"), NULL,
            WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,
            0, 0, 0, 0, hWnd, NULL, hInst, &ccs);
        return 0;
    case WM_DESTROY: PostQuitMessage(0); return 0;
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case 1000:
            mdic.szClass = _T("Client");
            mdic.szTitle = _T("Document");
            mdic.hOwner = hInst;
            mdic.x = CW_USEDEFAULT;
            mdic.y = CW_USEDEFAULT;
            mdic.cx = CW_USEDEFAULT;
            mdic.cy = CW_USEDEFAULT;
            mdic.style = 0;
            mdic.lParam = 0;

            hChild = (HWND)SendMessage(hClient, WM_MDICREATE, 0, (LPARAM)&mdic);
            break;
        default:
            hChild = (HWND)SendMessage(hClient, WM_MDIGETACTIVE, 0, 0);
            if(IsWindow(hChild)) 
                SendMessage(hChild, WM_COMMAND, wParam, lParam);
            break;
        }
        break;
    }
    return DefFrameProc(hWnd, hClient, uMsg, wParam, lParam);
}

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nShowCmd)
{    
    MSG msg;
    HWND hClient;
    HWND hWnd;

    WindowRegister(WndProc, _T("Sample"), (HBRUSH)(COLOR_APPWORKSPACE + 1));
    hInst = hInstance;
    hWnd = CreateWindow(_T("Sample"), _T("Sample"),WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,100, 100, 500, 400, NULL, NULL, hInstance, NULL);
    
    if (!hWnd) 
        return FALSE;
    hClient=GetWindow(hWnd, GW_CHILD);
    

    ShowWindow(hWnd, nShowCmd);
    UpdateWindow(hWnd);

    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateMDISysAccel(hClient, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return msg.wParam;
}

 

posted on 2017-11-15 00:57  LuoTian  阅读(464)  评论(0编辑  收藏  举报