Function WinAPI多控件问题

Function WinAPI多控件问题,function,winapi,user-controls,Function,Winapi,User Controls,我试图创建一个包含按钮控件和编辑控件的窗口。 我使用两个函数创建控件,一个用于按钮控件,另一个用于编辑控件 我遇到的问题是,我不能同时在窗口上使用两个控件。只有在窗口上显示的第一个函数中初始化的控件 代码如下: main.c gui.c #包括 #包括“gui.h” void CreateButtonControls(HWND hWindow,HWND*hButtonConvert) { const char*按钮convertCaption=“Convert”; 常量无符号整数按钮转换位置=1

我试图创建一个包含按钮控件和编辑控件的窗口。 我使用两个函数创建控件,一个用于按钮控件,另一个用于编辑控件

我遇到的问题是,我不能同时在窗口上使用两个控件。只有在窗口上显示的第一个函数中初始化的控件

代码如下: main.c

gui.c

#包括
#包括“gui.h”
void CreateButtonControls(HWND hWindow,HWND*hButtonConvert)
{
const char*按钮convertCaption=“Convert”;
常量无符号整数按钮转换位置=100;
const unsigned int buttonConvertYPosition=10;
const unsigned int buttonConvertWidth=125;
const unsigned int buttonConvertHeight=50;
const DWORD buttonConvertStyle=WS|u CHILD | WS|u VISIBLE;
*hButtonConvert=CreateWindowEx(WS_EX_CLIENTEDGE,“Button”,buttonConvertCaption,buttonConvertStyle,ButtonConvertExposition,ButtonConvertPosition,buttonConvertWidth,buttonConvertHeight,hWindow,(Humanu)IDB_CONVERT,NULL,NULL);;
}
无效CreateEditControls(HWND hWindow,HWND*hEditNumber)
{
const char*editNumberOption=NULL;
常量unsigned int editNumberXPosition=10;
常量unsigned int editNumberYPosition=10;
常量unsigned int editNumberWidth=50;
const unsigned int editNumberHeight=30;
const DWORD editNumberStyle=WS|u CHILD | WS|u VISIBLE | WS|u BORDER;
*hEditNumber=CreateWindowEx(WS_EX_CLIENTEDGE,“Edit”,editNumberOption,editNumberStyle,editNumberExposition,editNumberPosition,editNumberWidth,editNumberRight,hWindows,(menu)IDE_NUMBER,NULL,NULL);
}

hButton和hEdit不应声明为指针,如果您打算在其他地方使用它们,可能需要将它们放在全局范围内

HWND hButtonConvert = NULL;
HWND hEditNumber = NULL;

LRESULT CALLBACK WindowProc(HWND hWindow...)
{
    switch (message)
    {
        case WM_CREATE:
        {
        CreateEditControls(hWindow, &hEdit);
        CreateButtonControls(hWindow, &hButtonConvert);
        ...
        break;
        }
}
备选方案:

如果子窗口有自己的ID,则不需要保存其
HWND

void CreateEditControls(HWND hWindow)
{
    const int x = 10;
    const int y = 10;
    const int w = 50;
    const int h = 30;
    const DWORD style = WS_CHILD | WS_VISIBLE | WS_BORDER;
    CreateWindowEx(0, "Edit", 0, style, x, y, w, h, hWindow, (HMENU)IDE_NUMBER, NULL, NULL);
}
在另一个范围内:

HWND temporary = GetDlgItem(hWindow, IDE_NUMBER);
SetWindowText(temporary, "hey there");

有没有一种不使用全局变量的方法可以做到这一点?您可以动态分配一个内部有两个窗口句柄的结构,并将其存储为主窗口的
GWLP\u USERDATA
。那么我该如何更精确地做到这一点呢?我想您只是在谈论子控件的
HWND
。请参阅更新的答案,您不必保存这些控件,您可以通过其ID访问子控件
void CreateEditControls(HWND hWindow)
{
    const int x = 10;
    const int y = 10;
    const int w = 50;
    const int h = 30;
    const DWORD style = WS_CHILD | WS_VISIBLE | WS_BORDER;
    CreateWindowEx(0, "Edit", 0, style, x, y, w, h, hWindow, (HMENU)IDE_NUMBER, NULL, NULL);
}
HWND temporary = GetDlgItem(hWindow, IDE_NUMBER);
SetWindowText(temporary, "hey there");