从编辑字段中获取价值(C ++ WINAPI)

时间:2012-08-07 04:46:07

标签: c++ winapi variables scope

我正在用C ++ / WINAPI编写我的第一个简单程序,其中包含许多复选框和一些编辑字段,这些字段将在按下按钮时设置一些计算。我的所有复选框都通过个别情况来处理/存储信息,即

switch (msg)
{
    ...
    case WM_COMMAND:
    {
        switch (wParam)
        {
            case IDBC_BoxCheck1:
            {...}
            case IDBC_BoxCheck2:
            {...}
            ...
        } ...

...但是我认为编辑字段不像按钮按下那样作为一个案例语句,因为一旦它被改变了多次,就必须在用户想要的时候读取它。我在线查看并尝试使用SendMessage(hwnd,...)和GetWindowText(hwnd,...)函数将WM_GETTEXT命令发送到编辑字段并将其存储到lpstr字符串,但我遇到了同样的问题使用它们 - 编辑字段的hwnd不会在发送WM_GETTEXT命令的范围内声明,而且我不确定如何将其发送到那里。以下是我的程序中使用的结构的概述,该结构来自我正在使用的一些教程:

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_CREATE:
        {
            return OnCreate(hwnd, reinterpret_cast<CREATESTRUCT*>(lParam));
            // OnCreate is a sub function that handles the creation of all the buttons/controls,
            // since there are so many of them, with the format:
            // HWND editControl1 = CreateControl(...); // CreateControl being another sub fnct
                                                       // that creates edit field ctrls
                                                       // editControl1 is the hwnd I'm trying
                                                       // to read the value from
            // HWND checkControl1 = CreateButton(...); // Creates button ctrls, including ck box
            ...
        }
        ...
        case WM_COMMAND:
        {
            switch (wParam)
            {
                case IDBC_BoxCheck1:    // These control IDs are defined at the top of the file
                {
                   LPSTR Check1;
                   StoreInfo(Check1);   // Just a sub fnct to store info for later calculations
                }
                case IDBC_BoxCheck2:
                {
                    LPSTR Check2;
                    StoreInfo(Check2);
                } // etc... there are 20 or so check boxes/buttons
                case IDBC_Calculate:    
                {
                    LPSTR edit1;
                    GetWindowText(editControl1, edit1, 100); // or SendMessage(editControl1, ...)
                    // This kicks out the error of editControl1 not being declared in this scope
                    StoreInfo(edit1);
                    // Calculation function goes here
                } ...
            } ....
        }
        default: DefWindowProc(hwnd, msg, wParam, lParam);
    }
}

IDBC_Calculate是计算运行前按下的最后一个按钮。我认为在调用计算函数之前,在按下此按钮之后读取和存储编辑字段中的值的最佳位置,但是与同一命令相关联。这是hwnd editControl1未定义的地方,但我不知道如何将定义发送到此作用域,或者我应该在哪里读取和存储编辑字段值。

任何有关从这些编辑字段获取值到我的其他功能的帮助或指示将不胜感激!我已经看到了在各种教程/课程中检查按钮状态的许多不同方法,所以我很想知道是否有更好的方法来完成我上面所写的一般内容。< / p>

1 个答案:

答案 0 :(得分:0)

您的编辑字段有ID吗?然后你可以使用GetDlgItem。

editControl1 = GetDlgItem(hwnd, CONTROL_ID_1);

GetDlgItem命名不当,它不仅适用于对话框。它使用子窗口的ID从父窗口获取任何子窗口的句柄。

Anders K说的是正确的。你使用GetWindowText的方式会使你的程序崩溃。