0

C++ Win32 API を使用して、ダイアログ ボックスの代わりにウィンドウ ( CreateWindow() ) を作成しました。代わりに、Win 32 API の編集ウィンドウでデータを取得および設定するために使用される「GetDlgItemInt」または「SetDlgItemInt」に似たコマンドはありますか? そうしないと、ダイアログ ボックスを作成するか、INT を文字列に変換してから元に戻すための大量のコードを作成する必要があります。

アイデアは、ユーザーが作成したウィンドウ内の 2 つの編集ダイアログ ボックスに入力して、ウィンドウの幅と高さを指定することです。基本的にダイアログボックスを介してそれを行う方法を教えてくれる素敵な簡単なチュートリアルがありますが、ダイアログボックスに依存しないで使用できる同様の機能があるかどうか知りたいですか?

このようなものがあることを願っています...

xVal = 1280;
yVal = 720;
hwndResoX = CreateWindow("edit",xVal, WS_CHILD|WS_VISIBLE|WS_BORDER|ES_NUMBER,20,20,40,20, _hwnd, NULL, NULL, NULL);
hwndResoY = CreateWindow("edit",yVal, WS_CHILD|WS_VISIBLE|WS_BORDER|ES_NUMBER,80,20,40,20, _hwnd, NULL, NULL, NULL);

しかし、ご想像のとおり、INT から CHAR* に変換できないというコンパイル エラーが発生するため、CreateWindow() で xVal または yVal を使用できません。

4

2 に答える 2

0

CreateWindow の HMENU パラメータに int ID を指定するだけで、GetDlgItemInt を使用できます。

于 2011-04-12T16:40:45.133 に答える
0

これを行う最も簡単な方法:

// Create the window. Note that for edits, the caption is not the same as its contents,
// so we leave that empty here:
hwndResoX = CreateWindow("edit","", WS_CHILD|WS_VISIBLE|WS_BORDER|ES_NUMBER,20,20,40,20, _hwnd, NULL, NULL, NULL);

// Now create a string to use to set as the content:
char content[32];
sprintf(content, "%d", xVal); // Recommend using StringCchPrintf if there's any chance that the buffer size might be too small
SetWindowText(hwndResoX, content);

編集コントロールの使用に関するこの MSDN ページも参照してください。

データを取得するには、GetWindowText を使用して文字列を取得し、必要な文字列から整数への解析関数 (たとえば、strtol、atoi、sscanf など) を使用して解析します。

int と string の間で手動で変換する必要がありますが、それほど多くのコードではなく、数行追加するだけなので、ダイアログを使用するように変換するよりも手間がかかりません。

そうは言っても、ここで適切なダイアログを使用すると、いくつかの追加の利点が得られます。特に、ユーザーはフィールドからフィールドに自動的にタブ移動できますが、ダイアログ以外で有効にするには追加の作業を行う必要があります。

于 2011-03-15T22:57:01.450 に答える