zoukankan      html  css  js  c++  java
  • 通过Windows API实现的MDI简易程序

    ##

    #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;
    }
  • 相关阅读:
    C# 集合类 Array Arraylist List Hashtable Dictionary Stack Queue
    Javascript在IE与Firefox下的差异
    ASP.NET状态服务及session丢失问题解决方案总结
    在Silverlight中读取指定URL图片包数据
    Cookie记住滚动条
    IHttpModule 与IHttpHandler的区别
    页面内容随滚动条滚动动态载入JavaScript脚本。
    Asp.net MVC Action大全(转)
    简单的css横向菜单
    实线表格Html
  • 原文地址:https://www.cnblogs.com/tinaluo/p/7836579.html
Copyright © 2011-2022 走看看