■ 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++