C ++(WINAPI - WIN32)第二个编辑框无法读取输入值

时间:2014-04-01 02:08:34

标签: c++ winapi win32gui

我有两个编辑框。第一个编辑框读取输入,但第二个编辑框由于某种原因给我一个空值。我检查了Windows句柄值,它不是NULL。我应该做什么,因为我对GUI编程非常新。我希望你们能帮忙。

#include <windows.h>
#include "GUI.h"
#include <iostream>
#include <vector>  
#include <cstdio>
using namespace std;
//#include "main.h"

const char g_szClassName[] = "myWindowClass";
HWND btObj[1], lblObj, lbl2Obj, hEdit1, hEdit2;

void CreateObjects(HWND hWnd)
{
    //Buttons
    btObj[0] = CreateWindow(TEXT("button"),         //lpClassName = type of window to create
        TEXT("Process"),        //lpWindowName = Name that appears on the button
        WS_VISIBLE | WS_CHILD,  //dwStyle = Window style flags
        140, 90,                // x and y coordinates of the button in pixels
        105, 33,                //width and height of the button in pixels
        hWnd,                   //hWndParent = handle of the parent or main window
        (HMENU)1,              //Menu item ID = 1
        NULL, NULL);            //Set the last 2 params as null

    //Labels
    lblObj = CreateWindow(TEXT("edit"),
        TEXT("File Input: "),
        WS_VISIBLE | WS_CHILD,
        16, 16,
        490, 25,
        hWnd,
        (HMENU)2,
        NULL, NULL);

    //Textbox
    hEdit1 = CreateWindowEx(WS_EX_CLIENTEDGE,
        "EDIT", "",
        WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
        100, 16,
        200, 25,
        hWnd,
        (HMENU)IDC_MAIN_INPUT,
        GetModuleHandle(NULL), NULL);

    //Labels
    lbl2Obj = CreateWindow(TEXT("edit"),
        TEXT("File Output: "),
        WS_VISIBLE | WS_CHILD,
        16, 55,
        510, 40,
        hWnd,
        (HMENU)4,
        NULL, NULL);

    //Textbox number 2
    hEdit2 = CreateWindowEx(WS_EX_CLIENTEDGE,
        "EDIT", "",
        WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
        100, 55,
        200, 25,
        hWnd,
        (HMENU)IDC_MAIN_OUTPUT,
        GetModuleHandle(NULL), NULL);
}

// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_COMMAND:
            switch (LOWORD(wParam))
            {
                case IDC_MAIN_BUTTON:
                    //HWND inputFile, outputFile;
                    TCHAR inFile[30];
                    TCHAR outFile[30];

                    //TEXTBOX 1
                    HWND hEditWnd;
                    hEditWnd = GetDlgItem(hwnd, IDC_MAIN_INPUT);

                    HWND hEditWnd2;
                    hEditWnd2 = GetDlgItem(hwnd, IDC_MAIN_OUTPUT);

                    GetWindowText(hEditWnd,inFile, 30);
                    SetDlgItemTextA(hwnd, IDC_MAIN_INPUT, inFile);

                    if (hwnd == NULL)
                    {
                        MessageBox(NULL, "This hwnd is NULL Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
                        return 0;
                    }
                    else
                    {
                        MessageBox(NULL, "This hwnd has some value", "Error!", MB_ICONEXCLAMATION | MB_OK);
                    }

                    SetFocus (hEdit2);
                    GetWindowText(hEditWnd2,outFile, 30);
                    SetDlgItemTextA(hwnd, IDC_MAIN_OUTPUT, outFile);

                    MessageBox(NULL, inFile, "TESTING", MB_OK); 
                    MessageBox(NULL, outFile, "TESTING", MB_OK);
            }
            break;
        case WM_CREATE:
            CreateObjects(hwnd);
            break;
        case WM_CLOSE:
            DestroyWindow(hwnd);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;
    //Step 1: Registering the Window Class
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = 0;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = g_szClassName;
    wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    if (!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }
    // Step 2: Creating the Window
    hwnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        g_szClassName,
        "CSV Converter",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        390, 200,
        NULL, NULL,
        hInstance, NULL);
    if (hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);
    // Step 3: The Message Loop
    while (GetMessage(&Msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}

1 个答案:

答案 0 :(得分:0)

hEditWnd = GetDlgItem(hwnd, IDC_MAIN_INPUT);
...
GetWindowText(hEditWnd,inFile, 30);
SetDlgItemTextA(hwnd, IDC_MAIN_INPUT, inFile);

您正在从 IDC_MAIN_INPUT 控件中检索inFile值,然后将inFile值分配回相同的 IDC_MAIN_INPUT 控件。< / p>

hEditWnd2 = GetDlgItem(hwnd, IDC_MAIN_OUTPUT);
...
GetWindowText(hEditWnd2,outFile, 30);
SetDlgItemTextA(hwnd, IDC_MAIN_OUTPUT, outFile);

您正在从 IDC_MAIN_OUTPUT 控件中检索outFile值,然后将outFile值分配回相同的 IDC_MAIN_OUTPUT 控件。< / p>

最终结果:您没有看到用户界面中的任何变化,因为您实际上没有改变任何内容!