これは些細な質問のように思えるかもしれませんし、その答えが明確な目的を果たさない質問のように思えるかもしれませんが、私は純粋に知識と好奇心のために質問しています.
Win32 API を使用してプログラミングの知識を広げること以外に実際の目的のない Win32 GUI アプリケーションを作成しています。プログラムが起動されて WM_CREATE になった後、コントロール (特にテキスト フィールドとボタン) を作成する方法を考えています。呼ばれました。
UpdateWindow を使用すると WM_CREATE メッセージがウィンドウに送信されることはわかっていますが、正しく理解すれば、ソース内の WM_CREATE に既に記述されているものを更新するだけですか?
私が求めているのは、クリックすると別のボタンを追加するボタンと、クリックするとテキスト フィールドを追加するボタンです。
そして、コントロールではありませんが、クリック時に TextOut() または何かでテキストをペイントする別のボタン。
私はこれを探して過去2時間Googleを精査してきましたが、運がありませんUpdateWindow()
でしRedrawWindow()
た.
私はあなたたちに私のためにコードを書くように頼んでいませんが、それは素晴らしいことです:P
前もってありがとう、ティミー
また、私は VS10 で C++ を使用しており、.NET や MFC は使用していません。純粋な C++ のみです:D
編集:
main.cpp、メッセージ ループ:
case WM_CREATE:
hedit = ctrls->createTextArea(100, 50, 100, 20, ghInstance, hWnd, hEdit1);
hedit2 = ctrls->createBtn(200, 50, 100, 20, ghInstance, hWnd, "button", btn1);
return 0;
ctrls はコントロール クラス オブジェクトを参照し、このクラスの createTextArea と createBtn は次のようになります。
HWND controls::createTextArea(int x, int y, int width, int height, HINSTANCE hInst, HWND parent, int id)
{
return CreateWindowEx(NULL,
"Edit",
"",
WS_CHILD | WS_VISIBLE | ES_PASSWORD | WS_BORDER,
x, y,
width,height,
parent, (HBRUSH)id,
hInst,
NULL);
}
HWND controls::createBtn(int x, int y, int width, int height, HINSTANCE hInst, HWND parent, LPCSTR btnText, int id)
{
return CreateWindowEx(NULL,
"Button",
btnText,
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
x, y,
width, height,
parent, (HBRUSH)id,
hInst,
NULL);
}
編集2:
WM_COMMAND
case WM_COMMAND:
if( LOWORD(wParam) == btn1) // btn1 click
{
hBtn = CreateWindowEx(NULL,
"Button",
"Button2",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
400,50,100,20,
hWnd, NULL,
ghInstance,
NULL);
ShowWindow(hBtn, SW_SHOW);
UpdateWindow(hWnd);
}
return 0;
の「btn1」は、if( LOWORD(wParam) == btn1)
関数を介して呼び出される次のコードによって効果的に作成される別のボタンを作成するためにクリックするボタンの ID を参照します。
CreateWindowEx(NULL,
"Button",
btnText,
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
x, y,
width, height,
parent, (HMENU)id,
hInst,
NULL);