開発環境 Microsoft Visual Studio Community 2017
実行環境 Microsoft Windows 10 Home (64bit)
プロジェクトの種類 Visual C++ / 空のプロジェクト
プロジェクト名 DlgBase

参考

ソースファイルの追加

  • 「ソリューション エクスプローラー」の「ソース ファイル」を右クリックし、ポップアップメニューから「追加」→「新しい項目」を選択する
  • 「C++ ファイル (.cpp)」を選択する
  • 名前に「DlgBase.cpp」と入力する

ヘッダーファイルの追加

  • 「ソリューション エクスプローラー」の「ヘッダー ファイル」を右クリックし、ポップアップメニューから「追加」→「新しい項目」を選択する
  • 「ヘッダー ファイル (.h)」を選択する
  • 名前に「Resource.h」と入力する

リソースファイルの追加

  • エクスプローラーで「DlgBase.cpp」と同じディレクトリにテキストファイルを新規作成する
  • 名前を「DlgBase.rc」に変更する
  • 「ソリューション エクスプローラー」の「リソース ファイル」を右クリックし、ポップアップメニューから「追加」→「既存の項目」を選択し「DlgBase.rc」を追加する
  • 「DlgBase.rc」を右クリックし、ポップアップメニューから「コードの表示」を選択する

DlgBase.cpp
// プロジェクトのプロパティ
// Unicode文字セット
 
#include <Windows.h>
#include "Resource.h"
 
INT_PTR CALLBACK MainDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
 
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
	DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAINDLG), NULL, MainDlg);
	return 0;
}
 
INT_PTR CALLBACK MainDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	INT_PTR ret = TRUE;	// メッセージを処理した
 
	switch (message) {
	case WM_INITDIALOG:
		ret = TRUE;		// SetFocusでフォーカスを設定した場合はFALSE
		break;
	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDOK: {
			WCHAR buf[8];
			GetDlgItemText(hDlg, IDC_EDIT, buf, _countof(buf));
			MessageBox(hDlg, buf, L"メッセージ", MB_OK);
		}
				   break;
		case IDCANCEL:
			EndDialog(hDlg, IDCANCEL);
			break;
		}
		break;
	default:
		ret = FALSE;	// メッセージを処理しなかった
	}
 
	return ret;
}
 

Resource.h
#define IDD_MAINDLG	100
 
#define IDC_STATIC	-1
#define IDC_EDIT	1000
 

DlgBase.rc
// resource script
#include <windows.h>
#include "resource.h"
 
IDD_MAINDLG DIALOGEX 100, 100, 320, 200
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "DlgBase"
FONT 9, "MS UI Gothic"
BEGIN
LTEXT			"Input(&I):", IDC_STATIC, 8, 8, 48, 12
EDITTEXT		IDC_EDIT, 56, 8, 48, 12, ES_AUTOHSCROLL
DEFPUSHBUTTON	"OK", IDOK, 212, 176, 48, 16
PUSHBUTTON		"Cancel", IDCANCEL, 264, 176, 48, 16
END
 

  • 旧バージョン
+ ...
DlgBase.c
#include <Windows.h>
#include "resource.h"
 
// 関数プロトタイプ宣言
INT_PTR CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
 
//==============================================================================
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, MainDlgProc);
	return 0;
}
 
//------------------------------------------------------------------------------
INT_PTR CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	INT_PTR nRet = TRUE;	// メッセージを処理した
 
	switch (uMsg) {
	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDOK:
			{
				TCHAR szStr[256];
				GetDlgItemText(hDlg, IDC_EDIT, szStr, _countof(szStr));
				MessageBox(hDlg, szStr, TEXT("Message"), MB_OK);
			}
			break;
		case IDCANCEL:
			EndDialog(hDlg, IDCANCEL);
			break;
		}
		break;
	case WM_INITDIALOG:
		{
			RECT rcDesktop;
			RECT rcDialog;
			GetWindowRect(GetDesktopWindow(), &rcDesktop);
			GetWindowRect(hDlg, &rcDialog);
			SetWindowPos(hDlg, HWND_TOP,
				(rcDesktop.right  - (rcDialog.right - rcDialog.left)) / 2,
				(rcDesktop.bottom - (rcDialog.bottom - rcDialog.top)) / 2,
				0, 0, SWP_NOSIZE);
		}
		nRet = TRUE;	// SetFocusでフォーカスを設定した場合はFALSE
		break;
	case WM_CLOSE:
		EndDialog(hDlg, 0);
		break;
	default:
		nRet = FALSE;	// メッセージを処理しなかった
	}
	return nRet;
}
 

resource.h
#define IDD_MAIN	100
 
#define IDC_STATIC	-1
#define IDC_EDIT	1000
 

DlgBase.rc
// resource script
#include <windows.h>
#include "resource.h"
 
IDD_MAIN DIALOGEX 100, 100, 320, 200
STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX
EXSTYLE WS_EX_APPWINDOW
CAPTION "DlgBase"
FONT 9, "MS Pゴシック"
BEGIN
	LTEXT		"Input(&I):",IDC_STATIC,8,8,48,12
	EDITTEXT	IDC_EDIT,56,8,48,12,ES_AUTOHSCROLL
	DEFPUSHBUTTON	"OK",IDOK,212,176,48,16
	PUSHBUTTON	"Cancel",IDCANCEL,264,176,48,16
END
 
最終更新:2018年05月20日 21:36