C++ が好きで、windows ライクなアプリケーションを作成したいので、win32 を試すことにしました。今ではかなりうまくいっています(私は思う)。それにもかかわらず、私は問題を抱えています。
2 つのボタンを持つアプリケーションを作成したいと考えています。1 を押すと、もう 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);
}