山本ワールド
Windowsプログラミング
アルゴリズム Vitual C++ 2008/2013によるWin32/Win64 APIレベルのプログラム 基礎 Vitual C++ 2008/2013によるAPIレベルのプログラム(32/64bit) Wix3でインストーラーを作る Visual C++ 2008 Standard Editonによるフォームアプリケーションのプログラム(32/64bit) Vitual C++ 2008 Standard EditonによるAPIレベルのプログラム(32/64bit) Windows 7対応 Visual C++ 2008 ExpressによるAPIレベルのプログラム Visual C++ 2005 ExpressによるAPIレベルのプログラム Visual C++ Versiosn 5 BORLAND C++ Windowsプログラム全般 Excel VBA その他ウィンドウハンドルの検索
概要
ウィンドウを検索しウィンドウハンドルを取得する方法を説明します。
実行例を示すために下図のダイアログを作成しその後、OKボタンを押すと各種の方法でウィンドウハンドルを取得するプログラムを作成しました。
基本は、タブコントロールで説明しているプログラムにOKボタンを押した後にウィンドウハンドルを取得し保存する記述を追加しております。
ウィンドウハンドルだけではウィンドウの判別がしにくいので、GetWindowTextでウィンドウタイトル、GetClassNameでウィンドウクラス名を取得します。
取得した結果は、各API名のテキストファイルに保存されます。
上図の各ウィンドウの親子関係は以下の通りです。
""に囲まれた最初の文字列がウィンドウタイトル、次の文字列がウィンドウクラス名です。
指定したウィンドウに対して兄弟関係のウィンドウや子ウィンドウを検索することができます。
孫ウィンドウを検索する場合は、子ウィンドウを検索後さらにその子ウィンドウである孫ウィンドウを検索する必要があります。
子ウィンドウの一覧を取得する方法の例を以下に示します。最初にhWndの子ウィンドウを検索し、以後その兄弟ウィンドウを検索する例です。 whlieステートメントの中のhChildが検索されたウィンドウハンドルとなります。
whlieステートメントの中のhChildが検索されたウィンドウハンドルとなります。
ウィンドウが見つかるたびにコールバック関数が呼び出されます。
コールバック関数はEnumChildWindowと同じものが使用できます。
以下に記述例を示します。EnumWndProc関数のhWndが取得されたウィンドウハンドルです。
ウィンドウが見つかるたびにコールバック関数が呼び出されます。
コールバック関数はEnumWindowと同じものが使用できます。
以下に記述例を示します。EnumWndProc関数のhWndが取得されたウィンドウハンドルです。
以下の例は前項のメインダイアログの子ウィンドウのうちクラス名がButtonのウィンドウを検索する例です。
別途説明したいと思います。
実行例を示すために下図のダイアログを作成しその後、OKボタンを押すと各種の方法でウィンドウハンドルを取得するプログラムを作成しました。
基本は、タブコントロールで説明しているプログラムにOKボタンを押した後にウィンドウハンドルを取得し保存する記述を追加しております。
ウィンドウハンドルだけではウィンドウの判別がしにくいので、GetWindowTextでウィンドウタイトル、GetClassNameでウィンドウクラス名を取得します。
取得した結果は、各API名のテキストファイルに保存されます。
上図の各ウィンドウの親子関係は以下の通りです。
""に囲まれた最初の文字列がウィンドウタイトル、次の文字列がウィンドウクラス名です。
メインダイアログ ├"" "SysTabControl32" │ ├ "山田太郎" "Static" │ ├ "男" "Static" │ ├ "子供" "Static" │ ├ "OK" "Button" │ └ "キャンセル" "Button" │ ├"" "#32770" │ └ "山田太郎" "Edit" │ └"" "#32770" ├ "性別" "Button" ├ "男" "Button" ├ "女" "Button" ├ "料金" "Button" ├ "子供" "Button" └ "大人" "Button"
GetWindow API
コールバック関数を用いないので使いやすい関数です。指定したウィンドウに対して兄弟関係のウィンドウや子ウィンドウを検索することができます。
孫ウィンドウを検索する場合は、子ウィンドウを検索後さらにその子ウィンドウである孫ウィンドウを検索する必要があります。
子ウィンドウの一覧を取得する方法の例を以下に示します。最初にhWndの子ウィンドウを検索し、以後その兄弟ウィンドウを検索する例です。 whlieステートメントの中のhChildが検索されたウィンドウハンドルとなります。
HWND hChild = GetWindow(hWnd, GW_CHILD);
while (hChild){
hChild = GetWindow(hChild, GW_HWNDNEXT);
}
孫ウィンドウも含めて全部検索する場合は以下のように再帰的に関数を呼び出します。whlieステートメントの中のhChildが検索されたウィンドウハンドルとなります。
void SerachWindow(HWND hWnd){
HWND hChild = GetWindow(hWnd, GW_CHILD);
while (hChild){
SearchWindow(hChild);
hChild = GetWindow(hChild, GW_HWNDNEXT);
}
}
EnumWindow API
親ウィンドウが存在しないウィンドウを検索します。ウィンドウが見つかるたびにコールバック関数が呼び出されます。
コールバック関数はEnumChildWindowと同じものが使用できます。
以下に記述例を示します。EnumWndProc関数のhWndが取得されたウィンドウハンドルです。
BOOL CALLBACK EnumWndProc(HWND hWnd, LPARAM lParam){
return true;
}
EnumWindows(EnumWndProc, (LPARAM)0);
EnumChildWindow API
子ウィンドウ及び孫ウィンドウすべてが検索対象となります。ウィンドウが見つかるたびにコールバック関数が呼び出されます。
コールバック関数はEnumWindowと同じものが使用できます。
以下に記述例を示します。EnumWndProc関数のhWndが取得されたウィンドウハンドルです。
BOOL CALLBACK EnumWndProc(HWND hWnd, LPARAM lParam){
return true;
}
EnumChildWindows(hWnd, EnumWndProc, (LPARAM)0);
FindWindow API
トップレベルのウィンドウをクラス名またはクラス名かつウィンドウ名で検索します。HWND hWnd = FindWindow(_TEXT("SystemTray_Main"),NULL);
FindWindowEx API
子ウィンドウをウィンドウをクラス名またはクラス名かつウィンドウ名で検索します。以下の例は前項のメインダイアログの子ウィンドウのうちクラス名がButtonのウィンドウを検索する例です。
HWND hWnd = 0;
while (hWnd = FindWindowEx(hDlg, hWnd, _TEXT("Button"), NULL)){
TCHAR title[128];
TCHAR className[128];
GetWindowText(hWnd, title, sizeof(title) / sizeof(TCHAR));//ウインドウの文字を取得して、
GetClassName(hWnd, className, sizeof(className) / sizeof(TCHAR));
_ftprintf(fp, _TEXT("\"%s\" \"%s\" %0.8x\n"), title, className, (DWORD)hWnd);
}
WindowFromPoint API
スクリーン座標からウィンドウのハンドルを取得する関数です。別途説明したいと思います。
テスト環境
コンパイラ
Visual C++ 2008 Standard 32/64bitVisual C++ 2013 Express 32/64bit
実行環境
Windows 8.1 Enterprise 64bitWindows 7 EnterPrise Service Pack 1 64bit
Windows Vista Ultimate Service Pack 2 32bit
Windows XP Professional Service Pack 3 32bit
プログラムソースの概要
基本は、タブコントロールで説明しているプログラムにOKボタンを押した後にウィンドウハンドルを取得し保存する記述を追加しております。
ここでは追加部分のみ記載します。
以下に64bitでコンパイルした場合の実行し出力されたファイルの例を示します。
ウィンドウが子ウィンドウの場合、タブで字下げして出力します。
以下に64bitでコンパイルした場合の実行し出力されたファイルの例を示します。
以下に64bitでコンパイルした場合の実行し出力されたファイルの例を示します。
以下に64bitでコンパイルした場合の実行し出力されたファイルの例を抜粋して示します。
以下に64bitでコンパイルした場合の実行し出力されたファイルの例を示します
ここでは追加部分のみ記載します。
DlgProc1
case WM_COMMAND:
case IDOK:
ウィンドウハンドルを取得するために以下の関数を実行します。GetWindow2Save(hDlg);
GetWindows2Save(hDlg);
EnumChildWindow2Save(hDlg);
EnumWindow2Save();
FindWindow2Save();
FindWindowEx2Save(hDlg);
GetWindow2Save
GetWindow APIを使用してダイアログの子ウィンドウを検索し、 ウィンドウのタイトル・クラス名・子ウィンドウハンドル値(16進数)・親ウィンドウハンドル値(16進数)を ファイルGetWindow.txtに出力します。子ウィンドウの子ウィンドウは検索対象ではありません。以下に64bitでコンパイルした場合の実行し出力されたファイルの例を示します。
"" "SysTabControl32" 000000000004077e 00000000000a0782
"山田太郎" "Static" 0000000000060796 00000000000a0782
"男" "Static" 0000000000060792 00000000000a0782
"子供" "Static" 000000000005078e 00000000000a0782
"OK" "Button" 000000000004077a 00000000000a0782
"キャンセル" "Button" 00000000000207a0 00000000000a0782
"" "#32770" 000000000002079c 00000000000a0782
"" "#32770" 0000000000040786 00000000000a0782
GetWindows2Save
GetWindow APIを使用してダイアログの子ウィンドウ及びその子ウィンドウを再帰的に検索し、 ウィンドウのタイトル・クラス名・子ウィンドウハンドル値(16進数)・親ウィンドウハンドル値(16進数) をファイルGetWindows.txtに出力します。ウィンドウが子ウィンドウの場合、タブで字下げして出力します。
以下に64bitでコンパイルした場合の実行し出力されたファイルの例を示します。
"" "SysTabControl32" 000000000004077e 00000000000a0782
"山田太郎" "Static" 0000000000060796 00000000000a0782
"男" "Static" 0000000000060792 00000000000a0782
"子供" "Static" 000000000005078e 00000000000a0782
"OK" "Button" 000000000004077a 00000000000a0782
"キャンセル" "Button" 00000000000207a0 00000000000a0782
"" "#32770" 000000000002079c 00000000000a0782
"山田太郎" "Edit" 0000000000060794 000000000002079c
"" "#32770" 0000000000040786 00000000000a0782
"性別" "Button" 000000000004078a 0000000000040786
"男" "Button" 000000000023059e 0000000000040786
"女" "Button" 0000000000030780 0000000000040786
"料金" "Button" 00000000000a0700 0000000000040786
"子供" "Button" 0000000000060734 0000000000040786
"大人" "Button" 00000000000907ae 0000000000040786
EnumChildWindow2Save
EnumChildWindow APIを使用してダイアログの子ウィンドウを検索し、 ウィンドウのタイトル・クラス名・子ウィンドウハンドル値(16進数)を ファイルEnumChildWindow.txtに出力します。以下に64bitでコンパイルした場合の実行し出力されたファイルの例を示します。
"" "SysTabControl32" 000000000004077e
"山田太郎" "Static" 0000000000060796
"男" "Static" 0000000000060792
"子供" "Static" 000000000005078e
"OK" "Button" 000000000004077a
"キャンセル" "Button" 00000000000207a0
"" "#32770" 000000000002079c
"山田太郎" "Edit" 0000000000060794
"" "#32770" 0000000000040786
"性別" "Button" 000000000004078a
"男" "Button" 000000000023059e
"女" "Button" 0000000000030780
"料金" "Button" 00000000000a0700
"子供" "Button" 0000000000060734
"大人" "Button" 00000000000907ae
EnumWindow2Save
EnumWindow APIを使用してトップレベルのウィンドウ(親ウィンドウをもたないウィンドウ)のうちクラス名をSystemTray_Mainのウィンドウを検索し、 ウィンドウのタイトル・クラス名・ウィンドウハンドル値(16進数)を ファイルFindWindow.txtに出力します。以下に64bitでコンパイルした場合の実行し出力されたファイルの例を抜粋して示します。
"タスクの切り替え" "TaskSwitcherWnd" 0000000000020372
"Program Manager" "Progman" 0000000000010154
"MSCTFIME UI" "MSCTFIME UI" 00000000000200be
FindWindowEx2Save
FindWindowEx APIを使用してダイアログの子ウィンドウのうちクラス名Buttonのウィンドウを検索し、 ウィンドウのタイトル・クラス名・子ウィンドウハンドル値(16進数)を ファイルFindWindowEx.txtに出力します。以下に64bitでコンパイルした場合の実行し出力されたファイルの例を示します
"OK" "Button" 000000000004077a
"キャンセル" "Button" 00000000000207a0
プログラムソース
gethwnd.cpp
// タブコントロール+ウィンドウハンドルの取得
// Visual C++ 2013 32/64bit
#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#include <tchar.h>
#include "resource.h"
#define GET_WIN 1 // tabctl.cppに追加
#ifdef GET_WIN // tabctl.cppに追加
void GetWindows2Save(HWND hWnd, int level = 0);
void GetWindow2Save(HWND hWnd);
void EnumWindow2Save(void);
void EnumChildWindow2Save(HWND hWnd);
void FindWindow2Save(void);
void FindWindowEx2Save(HWND hParent);
#endif
// ダイアログボックスプロシージャー
LRESULT CALLBACK DlgProc1(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
// タブコントロールの0ページ目
LRESULT CALLBACK Page0Proc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
// タブコントロールの1ページ目
LRESULT CALLBACK Page1Proc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
HINSTANCE hInst;
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInst,
TCHAR* lpszCmdLine, int nCmdShow){
::hInst = hInstance;
DialogBox(hInstance, TEXT("TAB_DLG"), 0, (DLGPROC)DlgProc1);
return (int)0;
}
// ダイアログボックスプロシージャー
LRESULT CALLBACK DlgProc1(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){
static HWND hTab;
static HWND hPage0;
static HWND hPage1;
RECT rc;
TCITEM tc_item;
switch (msg) {
case WM_INITDIALOG:
hTab = GetDlgItem(hDlg, IDC_TABCNTRL);
tc_item.mask = TCIF_TEXT;
tc_item.pszText = _TEXT("名前");
TabCtrl_InsertItem(hTab, 0, &tc_item);
tc_item.pszText = TEXT("属性");
TabCtrl_InsertItem(hTab, 1, &tc_item);
hPage0 = CreateDialog(::hInst, _TEXT("DLG1"), hDlg, (DLGPROC)Page0Proc);
hPage1 = CreateDialog(::hInst, _TEXT("DLG2"), hDlg, (DLGPROC)Page1Proc);
ShowWindow(hPage0, SW_SHOW);
ShowWindow(hPage1, SW_HIDE);
GetClientRect(hDlg, &rc);
SendMessage(hDlg, WM_SIZE, 0, MAKELPARAM(rc.right, rc.bottom));
return TRUE;
case WM_SIZE:{
POINT dlg_pt;
POINT tab_pt;
dlg_pt.x = dlg_pt.y = 0;
ClientToScreen(hDlg, &dlg_pt);
tab_pt.x = tab_pt.y = 0;
ClientToScreen(hTab, &tab_pt);
GetClientRect(hTab, &rc);
TabCtrl_AdjustRect(hTab, FALSE, &rc);
int dx = tab_pt.x - dlg_pt.x;
int dy = tab_pt.y - dlg_pt.y;
MoveWindow(hPage0, rc.left+dx, rc.top+dy, rc.right - rc.left, rc.bottom - rc.top , TRUE);
MoveWindow(hPage1, rc.left+dx, rc.top+dy, rc.right - rc.left, rc.bottom - rc.top, TRUE);
break;
}
case WM_NOTIFY:
switch (((NMHDR *)lParam)->code){
case TCN_SELCHANGE:{ // タブの切り替え
int num=TabCtrl_GetCurSel(hTab);
if (num == 0){
ShowWindow(hPage0, SW_SHOW);
ShowWindow(hPage1, SW_HIDE);
}
else{
ShowWindow(hPage0, SW_HIDE);
ShowWindow(hPage1, SW_SHOW);
}
break;
}
}
return FALSE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:{
#ifdef GET_WIN // tabctl.cppに追加
GetWindow2Save(hDlg);
GetWindows2Save(hDlg);
EnumChildWindow2Save(hDlg);
EnumWindow2Save();
FindWindow2Save();
FindWindowEx2Save(hDlg);
#endif
EndDialog(hDlg, TRUE);
return TRUE;
}
case IDCANCEL:
EndDialog(hDlg,FALSE);
return FALSE;
default:
return FALSE;
}
default:
return FALSE;
}
return TRUE;
}
// タブコントロールの0ページ目
LRESULT CALLBACK Page0Proc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){
TCHAR buf[32];
switch (msg) {
case WM_INITDIALOG:
SetWindowText(GetDlgItem(hDlg, IDC_EDIT1), _TEXT("山田太郎"));
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_EDIT1:
if (HIWORD(wParam) == EN_UPDATE){ // エディットボックスが変更された場合
GetDlgItemText(hDlg, IDC_EDIT1, (TCHAR*)buf, sizeof(buf) / sizeof(TCHAR));
SetWindowText(GetDlgItem(GetParent(hDlg), IDC_LABEL1), buf);
}
break;
default:
return FALSE;
}
default:
return FALSE;
}
return TRUE;
}
// タブコントロールの1ページ目
LRESULT CALLBACK Page1Proc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){
switch (msg) {
case WM_INITDIALOG:
SendMessage(GetDlgItem(hDlg, IDC_RADIOBUTTON101), BM_SETCHECK, BST_CHECKED, 0);
SendMessage(GetDlgItem(hDlg, IDC_RADIOBUTTON111), BM_SETCHECK, BST_CHECKED, 0);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_RADIOBUTTON101:
if (HIWORD(wParam) == BN_CLICKED){
SetWindowText(GetDlgItem(GetParent(hDlg), IDC_LABEL103), _TEXT("男"));
}
return FALSE;
case IDC_RADIOBUTTON102:
if (HIWORD(wParam) == BN_CLICKED){
SetWindowText(GetDlgItem(GetParent(hDlg), IDC_LABEL103), _TEXT("女"));
}
return FALSE;
case IDC_RADIOBUTTON111:
if (HIWORD(wParam) == BN_CLICKED){
SetWindowText(GetDlgItem(GetParent(hDlg), IDC_LABEL113), _TEXT("子供"));
}
return FALSE;
case IDC_RADIOBUTTON112:
if (HIWORD(wParam) == BN_CLICKED){
SetWindowText(GetDlgItem(GetParent(hDlg), IDC_LABEL113), _TEXT("大人"));
}
return FALSE;
default:
return FALSE;
}
default:
return FALSE;
}
return TRUE;
}
#ifdef GET_WIN // tabctl.cppに追加
void GetWindow2Save(HWND hWnd){
FILE* fp;
_tfopen_s(&fp, _TEXT("GetWindow.txt"), _TEXT("w"));
HWND hChild = GetWindow(hWnd, GW_CHILD);
while (hChild){
TCHAR title[128];
TCHAR className[128];
GetWindowText(hChild, title, sizeof(title) / sizeof(TCHAR));//ウインドウの文字を取得
GetClassName(hChild, className, sizeof(className) / sizeof(TCHAR));
#ifdef _WIN64
_ftprintf(fp, _TEXT("\"%s\" \"%s\" %0.16I64x %0.16I64x\n"), title, className, (UINT64)hChild, (UINT64)hWnd);
#else
_ftprintf(fp, _TEXT("\"%s\" \"%s\" %0.8x %0.8x\n"), title, className, (DWORD)hChild, (DWORD)hWnd);
#endif
hChild = GetWindow(hChild, GW_HWNDNEXT);
}
fclose(fp);
}
void GetWindows2Save(HWND hWnd, int level){
static FILE* fp = 0;
if (level == 0){
_tfopen_s(&fp, _TEXT("GetWindows.txt"), _TEXT("w"));
}
HWND hChild = GetWindow(hWnd, GW_CHILD);
while (hChild){
TCHAR title[128];
TCHAR className[128];
GetWindowText(hChild, title, sizeof(title) / sizeof(TCHAR));//ウインドウの文字を取得
GetClassName(hChild, className, sizeof(className) / sizeof(TCHAR));
for (int n = 0; n<level; n++){
_ftprintf(fp, _TEXT("\t"));
}
#ifdef _WIN64
_ftprintf(fp, _TEXT("\"%s\" \"%s\" %0.16I64x %0.16I64x\n"), title, className, (UINT64)hChild, (UINT64)hWnd);
#else
_ftprintf(fp, _TEXT("\"%s\" \"%s\" %0.8x %0.8x\n"), title, className, (DWORD)hChild, (DWORD)hWnd);
#endif
GetWindows2Save(hChild, level + 1);
hChild = GetWindow(hChild, GW_HWNDNEXT);
}
if (level == 0){
fclose(fp);
}
}
BOOL CALLBACK EnumWndProc(HWND hWnd, LPARAM lParam){
FILE* fp = (FILE*)lParam;
TCHAR title[128];
TCHAR className[128];
GetWindowText(hWnd, title, sizeof(title) / sizeof(TCHAR));
GetClassName(hWnd, className, sizeof(className) / sizeof(TCHAR));
#ifdef _WIN64
_ftprintf(fp, _TEXT("\"%s\" \"%s\" %0.16I64x\n"), title, className, (UINT64)hWnd);
#else
_ftprintf(fp, _TEXT("\"%s\" \"%s\" %0.8x\n"), title, className, (DWORD)hWnd);
#endif
return true;
}
void EnumChildWindow2Save(HWND hWnd){
FILE* fp;
_tfopen_s(&fp, _TEXT("EnumChildWindow.txt"), _TEXT("w"));
EnumChildWindows(hWnd, EnumWndProc, (LPARAM)fp);
fclose(fp);
}
void EnumWindow2Save(void){
FILE* fp;
_tfopen_s(&fp, _TEXT("EnumWindow.txt"), _TEXT("w"));
EnumWindows(EnumWndProc, (LPARAM)fp);
fclose(fp);
}
void FindWindow2Save(void){
FILE* fp;
_tfopen_s(&fp, _TEXT("FindWindow.txt"), _TEXT("w"));
{
HWND hWnd = FindWindow(_TEXT("SystemTray_Main"), NULL);
TCHAR title[128];
TCHAR className[128];
GetWindowText(hWnd, title, sizeof(title) / sizeof(TCHAR));//ウインドウの文字を取得
GetClassName(hWnd, className, sizeof(className) / sizeof(TCHAR));
#ifdef _WIN64
_ftprintf(fp, _TEXT("\"%s\" \"%s\" %0.16I64x\n"), title, className, (UINT64)hWnd);
#else
_ftprintf(fp, _TEXT("\"%s\" \"%s\" %0.8x\n"), title, className, (DWORD)hWnd);
#endif
}
fclose(fp);
}
void FindWindowEx2Save(HWND hParent){
FILE* fp;
_tfopen_s(&fp, _TEXT("FindWindowEx.txt"), _TEXT("w"));
HWND hWnd = 0;
while (hWnd = FindWindowEx(hParent, hWnd, _TEXT("Button"), NULL)){
TCHAR title[128];
TCHAR className[128];
GetWindowText(hWnd, title, sizeof(title) / sizeof(TCHAR));//ウインドウの文字を取得
GetClassName(hWnd, className, sizeof(className) / sizeof(TCHAR));
#ifdef _WIN64
_ftprintf(fp, _TEXT("\"%s\" \"%s\" %0.16I64x\n"), title, className, (UINT64)hWnd);
#else
_ftprintf(fp, _TEXT("\"%s\" \"%s\" %0.8x\n"), title, className, (DWORD)hWnd);
#endif
}
fclose(fp);
}
#endif
resource.h
#define IDC_TABCNTRL 300
#define IDC_EDIT1 200
#define IDC_LABEL1 210
#define IDC_GROUPBOX100 100
#define IDC_RADIOBUTTON101 101
#define IDC_RADIOBUTTON102 102
#define IDC_LABEL103 103
#define IDC_GROUPBOX110 110
#define IDC_RADIOBUTTON111 111
#define IDC_RADIOBUTTON112 112
#define IDC_LABEL113 113
resource.rc
#include <windows.h>
#include "resource.h"
TAB_DLG DIALOG DISCARDABLE 0, 0, 205, 185
STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SETFONT
CAPTION "タブコントロール+ウィンドウハンドルの取得"
FONT 9, "MS Shell Dlg"
{
CONTROL "", IDC_TABCNTRL, "SYSTABCONTROL32", WS_CHILD | WS_VISIBLE | TCS_SINGLELINE | TCS_TABS, 7, 7, 120, 120
CONTROL "" , IDC_LABEL1 ,"STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY,134,7,64,14
CONTROL "男", IDC_LABEL103, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 134, 27, 64, 14
CONTROL "子供", IDC_LABEL113, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 134, 48, 64, 14
DEFPUSHBUTTON "OK", IDOK, 9, 154, 50, 14
PUSHBUTTON "キャンセル", IDCANCEL, 70, 154, 50, 14
}
DLG1 DIALOG DISCARDABLE 0, 0, 121, 76
STYLE WS_BORDER | WS_CHILD
FONT 9, "MS Shell Dlg"
{
EDITTEXT IDC_EDIT1, 7, 13, 104, 14, ES_AUTOHSCROLL
}
DLG2 DIALOG DISCARDABLE 0, 0, 129, 147
STYLE WS_BORDER | WS_CHILD
FONT 9, "MS Shell Dlg"
{
CONTROL "性別", IDC_GROUPBOX100, "BUTTON", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 7, 7, 85, 35
CONTROL "男", IDC_RADIOBUTTON101, "BUTTON", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON | WS_GROUP, 14, 21, 32, 14
CONTROL "女", IDC_RADIOBUTTON102, "BUTTON", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 53, 21, 32, 14
CONTROL "料金", IDC_GROUPBOX110, "BUTTON", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 7, 56, 85, 35
CONTROL "子供", IDC_RADIOBUTTON111, "BUTTON", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON | WS_GROUP, 14, 70, 32, 14
CONTROL "大人", IDC_RADIOBUTTON112, "BUTTON", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 53, 70, 32, 14
}
ソースファイルと実行ファイルのダウンロード
Copyright (C) 2012 山本ワールド All Rights Reserved.