zoukankan      html  css  js  c++  java
  • win32 inputbox

    #define ID_INPUTEDIT 1001
    #define ID_OK 1002
    
    LRESULT CALLBACK inputBoxWndProc(HWND wndHandle, UINT message, WPARAM wParam, LPARAM lParam)
    {    
        static char **result = 0;
        static HWND inputLabelHandle = 0;
        static HWND inputHandle = 0;    
        
        switch (message)
        {
        case WM_NCCREATE:
            result = ((CREATESTRUCT *)lParam)->lpCreateParams;        
            break;
        
        case WM_CLOSE:
        case WM_DESTROY:    
            PostQuitMessage(0);
            break;
        
        case WM_COMMAND:    
            int notifyCode = HIWORD(wParam);    
            int controlId = LOWORD(wParam);    
            HWND controlHandle = (HWND)lParam;    
            
            switch (controlId)
            {
            case ID_INPUTEDIT:    
                inputHandle = controlHandle;
                break;
                
            case ID_OK:
                *result = malloc(256);
                GetWindowText(inputHandle, *result, 256);
                PostQuitMessage(0);
                break;
            }
            break;
        }
        
        return DefWindowProc(wndHandle, message, wParam, lParam);
    }
     
    char *inputbox(char *hint)
    {
    #define X 5
    #define OKBUTTON_WIDTH 75
    #define INPUTEDIT_WIDTH (width0 - OKBUTTON_WIDTH)
    #define INPUTEDIT_Y 29
    #define HINT_HEIGHT 24
    #define CHAR_WIDTH 8
        HWND dialogHandle, inputLabelHandle, inputHandle, okButtonHandle;
        char *result;
        WNDCLASS wndClass;
        int hint_width = strlen(hint) * CHAR_WIDTH,
            width0 = hint_width + OKBUTTON_WIDTH,
            height = HINT_HEIGHT + INPUTEDIT_Y + 50;
        MSG msg;
        
        ZeroMemory(&wndClass, sizeof wndClass);
        wndClass.hCursor = LoadCursor(0, IDC_ARROW);
    //    WndClass.hIcon = LoadIcon(0, IDI_APPLICATION);
    //    wndClass.cbSize = sizeof wndClass;
        wndClass.style = CS_HREDRAW | CS_VREDRAW;
        wndClass.lpfnWndProc = inputBoxWndProc;
        wndClass.hbrBackground = (HBRUSH)COLOR_WINDOWFRAME;
        wndClass.lpszClassName = "InputBox";
        wndClass.hInstance = GetModuleHandle(0);
    
        RegisterClass(&wndClass);
        
        dialogHandle = CreateWindow(
            wndClass.lpszClassName, "Bilibili弹幕反查用户工具", WS_OVERLAPPEDWINDOW,
            100, 100, width0 + 50, height,
            0, 0, wndClass.hInstance, &result);
    
        inputLabelHandle = CreateWindow(
            "STATIC", hint, WS_CHILD | WS_VISIBLE,
            X, 5, hint_width, HINT_HEIGHT,
            dialogHandle, 0, wndClass.hInstance, 0);
    
        inputHandle = CreateWindow(
            "EDIT", "", WS_BORDER | WS_CHILD | WS_VISIBLE,
            X, INPUTEDIT_Y, INPUTEDIT_WIDTH, 24,
            dialogHandle, (HMENU)ID_INPUTEDIT, wndClass.hInstance, 0);
    
        okButtonHandle = CreateWindow(
            "BUTTON", "确定", WS_CHILD | WS_VISIBLE,
            X + INPUTEDIT_WIDTH + 5, INPUTEDIT_Y, OKBUTTON_WIDTH, 24,
            dialogHandle, (HMENU)ID_OK, wndClass.hInstance, 0);
        
        if(dialogHandle == 0)
            return 0;
     
        // 在桌面显示窗口
        ShowWindow(dialogHandle, SW_SHOWNORMAL);
     
        // 刷新窗口客户区
        UpdateWindow(dialogHandle);
     
        do
        {        
            if (GetMessage(&msg, 0, 0, 0))    
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        } while (msg.message != WM_QUIT);
     
        return result;
    }
     
  • 相关阅读:
    [技术讨论] [NR]请教是怎么理解SSB/RMSI/BWP的
    在TD-LTE中,应用层速率,PDCP层速率,MAC层速率,物理层速率
    5G超级上行国际标准制定 预计明年完成 来源:通信信息报
    LTE 下行PDSCH 信道功率分配-Pa、Pb
    GSM信道(控制信道和业务信道)转自搜狗百科
    10秒钟让你的日志模块化
    当Parallel遇上了DI
    Spring Boot 高效数据聚合之道
    如何用代理平台解决微服务的一些痛点
    linux守护进程、SIGHUP与nohup详解
  • 原文地址:https://www.cnblogs.com/ageane/p/inputbox.html
Copyright © 2011-2022 走看看