■ SDK モードレスダイアログのテンプレート

他ウィンドウからダイアログを表示させた場合モードレスとなります

ダイアログのリソースを挿入してください。
VC6 リソースの追加方法
後は、このコードを使用するだけでダイアログベースでアプリケーションが作成できます。
TABSTOPの動作を止める場合はif(!IsDialogMessage(hDlg,&msg))をコメントアウトしてください

他のウィンドウからダイアログが作成される場合、TABSTOPが動作しませんので
呼び出し元(このダイアログではない)メイン関数のループの中を以下のように変更する必要があります
if(!(IsDialogMessage(hWnd,&msg)||IsDialogMessage(hDlg,&msg))){//タブキーでコントロールを移動したくない場合はこの行をコメントする
	TranslateMessage(&msg); 
	DispatchMessage(&msg); 
}
ダイアログの作成元でダイアログのメッセージも通過するようにしています。
ココから下がモードレスダイアログのテンプレート


#include <windows.h>
#include "resource.h"

BOOL CALLBACK DlgProc1(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hCurInst,HINSTANCE hPrevInst,
					LPSTR lpsCmdLine,int nCmdShow ){

						
	HWND hDlg;
	hDlg=CreateDialog(hCurInst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DlgProc1);
	ShowWindow(hDlg,SW_NORMAL);					
						
	MSG msg;
	BOOL bRet;

	while((bRet = GetMessage(&msg,NULL,0,0)) != 0){
		if(bRet == -1){
			MessageBox(NULL,"GetMessage ERR","Error",MB_OK);
			break;
		}else{
			if(!IsDialogMessage(hDlg,&msg)){ //TABキーでコントロールを移動に必要
				TranslateMessage(&msg); 
				DispatchMessage(&msg); 
			} 
		}
	}
	return (int)msg.wParam;
}

//ダイアログプロシージャー
BOOL CALLBACK DlgProc1(HWND hDlg,UINT msg,WPARAM wp,LPARAM lp){
	switch (msg){
		case WM_SHOWWINDOW:
//			SetTimer(hDlg,1000,500,NULL);//ID:1000 500msのタイマーを作成
			break;
		case WM_PAINT:
			break;
		case WM_TIMER:
//			if(wp == 1000){
//				OutputDebugString("a");//デバッグ出力
//			}
			break;
		case WM_COMMAND:
//			switch (LOWORD(wp)){
//				case IDC_BUTTON1:
//					OutputDebugString("button1");//デバッグ出力
//					SetWindowText(GetDlgItem(hDlg,IDC_EDIT1),"button1");//ダイアログに貼り付けたテキストに文字を入れる
//					break;
//				case IDC_BUTTON2:
//					OutputDebugString("button2");//デバッグ出力
//					SetWindowText(GetDlgItem(hDlg,IDC_EDIT1),"button2");//ダイアログに貼り付けたテキストに文字を入れる
//					break;
//			}
			break;
		case WM_CLOSE:
//			KillTimer(hDlg,1000);//タイマーを破棄
//			EndDialog(hDlg,WM_CLOSE);
			DestroyWindow(hDlg);
			PostQuitMessage(0);
		break;
	}
	return FALSE;
}


▲トップページ > Windows と C++