创建win32 API C+后访问组件+; 喜欢C++,想创建一个类似Windows的应用程序,我决定尝试Win32。现在我认为这是相当不错的。然而,我发现自己有一个问题

创建win32 API C+后访问组件+; 喜欢C++,想创建一个类似Windows的应用程序,我决定尝试Win32。现在我认为这是相当不错的。然而,我发现自己有一个问题,c++,winapi,C++,Winapi,我想创建一个有两个按钮的应用程序。按下1时,另一个不再可见(非常有用) 问题 我似乎无法访问我在应用程序中创建的按钮。如何访问回调中的“已创建”按钮。我很确定这是一个相当不切实际的问题,但它肯定会帮助我前进 到目前为止我做了什么(不包括所有代码) enum{ IDBC_def按钮=200 }; //原型函数 LRESULT回调WndProc(HWND、UINT、WPARAM、LPARAM); int OnCreate(consthwnd,CREATESTRUCT*); HWND CreateBu

我想创建一个有两个按钮的应用程序。按下1时,另一个不再可见(非常有用)

问题

我似乎无法访问我在应用程序中创建的按钮。如何访问回调中的“已创建”按钮。我很确定这是一个相当不切实际的问题,但它肯定会帮助我前进

到目前为止我做了什么(不包括所有代码)

enum{
IDBC_def按钮=200
};
//原型函数
LRESULT回调WndProc(HWND、UINT、WPARAM、LPARAM);
int OnCreate(consthwnd,CREATESTRUCT*);
HWND CreateButton(常量HWND、常量HINSTANCE、DWORD、常量RECT&、常量int、常量ustring&);
内联int ErrMsg(const-ustring&);
//主要
int WINAPI WinMain(HINSTANCE HINSTANCE、HINSTANCE、LPSTR pStr、int nCmd){
...
}
LRESULT回调WndProc(HWND HWND、UINT uMsg、WPARAM WPARAM、LPARAM LPARAM){
开关(uMsg){
案例WM_CREATE://APP-CREATE
创建时返回(hwnd,重新解释强制转换(lParam));
case WM_命令:
开关(LOWORD(wParam)){
案例IDBC_def按钮:{
PostQuitMessage(0);
返回0;
}
}
打破
案例WM_DESTROY://APP-END
PostQuitMessage(0);
返回0;
违约:
返回DefWindowProc(hwnd、uMsg、wParam、lParam);
}
}
onCreate函数创建了所有的按钮,并与回调一起工作得很好(当我点击按钮时,应用程序实际上退出了!(测试目的))。而不是拥有

PostQuitMessage(0)

我想要一些像:

IDBC_def butdown.Visible=假

以下代码是OnCreate函数和CreateButton函数:

int OnCreate(const HWND hwnd,CREATESTRUCT *cs) {
    RECT rc={10,10,200,40}; //Position Rectangle
    CreateButton(hwnd,cs->hInstance,BS_DEFPUSHBUTTON,rc,IDBC_DEFPUSHBUTTON,_T("DEFAULT PUSH BUTTON"));
    return 0;
}

//Button creation function
HWND CreateButton(const HWND hParent,const HINSTANCE hInst,DWORD dwStyle,const RECT& rc,const int id,const ustring& caption) {
    dwStyle|=WS_CHILD|WS_VISIBLE;
    return CreateWindowEx(0,_T("button"),caption.c_str(),dwStyle,rc.left,rc.top,rc.right,rc.bottom,hParent,reinterpret_cast<HMENU>(static_cast<INT_PTR>(id)),hInst,0);
}
int OnCreate(const-HWND-HWND,CREATESTRUCT*cs){
RECT rc={10,10200,40};//位置矩形
创建按钮(hwnd、cs->hInstance、BS_def按钮、rc、IDBC_def按钮、_T(“默认按钮”);
返回0;
}
//按钮创建功能
HWND CreateButton(常量HWND hParent、常量HINSTANCE hInst、DWORD dwStyle、常量RECT和rc、常量int id、常量USTR和标题){
dwStyle |=WS|u CHILD | WS|u可见;
返回CreateWindowEx(0,_T(“按钮”),caption.c_str(),dwStyle,rc.left,rc.top,rc.right,rc.bottom,hParent,reinterpreet_cast(static_cast(id)),hInst,0);
}

访问控制窗口有两种方法。一种是保存CreateWindowEx返回的
HWND
,并在每次需要访问控件时使用它。另一种方法是,如果知道父窗口的
HWND
以及创建控件时指定的ID,则调用该方法,该方法将返回控件的
HWND
。显然,保存原始值比较容易,因为它不会改变。

因此,例如,创建HWND向量并将按钮放在其中是推荐的方法?@Florisvellman,如果按钮数量固定,则更典型的做法是为每个按钮创建一个变量,但我认为你有这个想法。
int OnCreate(const HWND hwnd,CREATESTRUCT *cs) {
    RECT rc={10,10,200,40}; //Position Rectangle
    CreateButton(hwnd,cs->hInstance,BS_DEFPUSHBUTTON,rc,IDBC_DEFPUSHBUTTON,_T("DEFAULT PUSH BUTTON"));
    return 0;
}

//Button creation function
HWND CreateButton(const HWND hParent,const HINSTANCE hInst,DWORD dwStyle,const RECT& rc,const int id,const ustring& caption) {
    dwStyle|=WS_CHILD|WS_VISIBLE;
    return CreateWindowEx(0,_T("button"),caption.c_str(),dwStyle,rc.left,rc.top,rc.right,rc.bottom,hParent,reinterpret_cast<HMENU>(static_cast<INT_PTR>(id)),hInst,0);
}