gpt4 book ai didi

c++ - 创建 win32 API C++ 后访问组件

转载 作者:行者123 更新时间:2023-11-28 07:45:18 25 4
gpt4 key购买 nike

因为喜欢 c++ 并想创建一个类似 windows 的应用程序,所以我决定尝试 win32。现在效果相当不错(我认为)。尽管如此,我发现自己遇到了问题。

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

问题

我似乎无法访问我在应用程序中创建的按钮。如何访问 CALLBACK 中创建的按钮。我很确定这是一个相当菜鸟的问题,但它肯定会帮助我进步。

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

enum {
IDBC_DEFPUSHBUTTON=200
};

//Prototype functions
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int OnCreate(const HWND,CREATESTRUCT*);
HWND CreateButton(const HWND,const HINSTANCE,DWORD,const RECT&,const int,const ustring&);
inline int ErrMsg(const ustring&);

//Main
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR pStr,int nCmd) {
...
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) {
switch (uMsg) {
case WM_CREATE: //APP-CREATE
return OnCreate(hwnd,reinterpret_cast<CREATESTRUCT*>(lParam));
case WM_COMMAND:
switch(LOWORD(wParam)) {
case IDBC_DEFPUSHBUTTON: {
PostQuitMessage(0);
return 0;
}
}
break;
case WM_DESTROY: //APP-END
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
}

onCreate 函数创建所有按钮并与 CALLBACK 配合使用(当我单击按钮时应用程序实际上退出了!(测试目的))。而是拥有

PostQuitMessage(0)

我想要这样的东西:

IDBC_DEFPUSHBUTTON.Visible = false;

以下代码是 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);
}

最佳答案

有两种方法可以访问控制窗口。一种是将CreateWindowEx返回的HWND保存下来,每次需要访问控件时使用。另一种是调用GetDlgItem如果您知道父窗口的 HWND 和您在创建控件时分配的 ID,这将返回控件的 HWND。显然,只保存原始值更容易,因为它不会改变。

关于c++ - 创建 win32 API C++ 后访问组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15011007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com