開発環境 Microsoft Visual C++ 2010 Express (SP1)
実行環境 Microsoft Windows XP Home Edition (SP3)
プロジェクトの種類 Win32 プロジェクト
プロジェクト名 DlgBase2
アプリケーションの種類 Windows アプリケーション
追加のオプション 空のプロジェクト
文字セット Unicode

DlgBase2.cpp
#include <stdio.h>
#include <tchar.h>
#include <Windows.h>
#include "resource.h"
 
// 関数プロトタイプ宣言
int GetIniFileName(void);
INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
void OnInitDialog(HWND hDlg);
void OnDestroy(HWND hDlg);
void WriteIniFileInt(TCHAR* ptcSec, TCHAR* ptcKey, int iValue);
 
// グローバル変数
TCHAR g_atcIniFile[_MAX_PATH] = _T("");
 
//==============================================================================
int APIENTRY _tWinMain(
	HINSTANCE	hInstance,
	HINSTANCE	hPrevInstance,
	LPTSTR		lpCmdLine,
	int		nCmdShow)
{
	if (GetIniFileName()) {
		return 0;
	}
	DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN_DIALOG), NULL, DialogProc);
	return 0;
}
 
//------------------------------------------------------------------------------
int GetIniFileName(void)
{
	TCHAR	atcPath	[_MAX_PATH];
	TCHAR	atcDrive[_MAX_DRIVE];
	TCHAR	atcDir	[_MAX_DIR];
	TCHAR	atcFName[_MAX_FNAME];
	TCHAR	atcExt	[_MAX_EXT];
 
	if (GetModuleFileName(NULL, atcPath, _countof(atcPath)) == 0) {
		return -1;
	}
	if (_tsplitpath_s(atcPath, atcDrive, atcDir, atcFName, atcExt) != 0) {
		return -1;
	}
	if (_tmakepath_s(g_atcIniFile, atcDrive, atcDir, atcFName, _T("ini")) != 0) {
		return -1;
	}
	return 0;
}
 
//------------------------------------------------------------------------------
INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	INT_PTR	iRetVal = TRUE;		// メッセージを処理した
	TCHAR	atcStr[256];
	int	iRet;
 
	switch (uMsg) {
	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDC_BUTTON_WORLD:
			MessageBox(hDlg, _T("hello, world"), _T("World"), MB_OK);
			break;
		case IDOK:
			GetDlgItemText(hDlg, IDC_EDIT_HELLO, atcStr, _countof(atcStr));
			MessageBox(hDlg, atcStr, _T("OK"), MB_OK);
			break;
		case IDCANCEL:
			iRet = MessageBox(hDlg, _T("終了しますか?"), _T("Cancel"), MB_YESNO);
			if (iRet == IDYES) {
				EndDialog(hDlg, IDCANCEL);
			}
			break;
		}
		break;
	case WM_INITDIALOG:
		OnInitDialog(hDlg);
		iRetVal = TRUE;		// SetFocusでフォーカスを設定した場合はFALSE
		break;
	case WM_CLOSE:
		EndDialog(hDlg, 0);
		break;
	case WM_DESTROY:
		OnDestroy(hDlg);
		break;
	default:
		iRetVal = FALSE;	// メッセージを処理しなかった
	}
	return iRetVal;
}
 
//------------------------------------------------------------------------------
void OnInitDialog(HWND hDlg)
{
	int	iX;
	int	iY;
 
	iX = GetPrivateProfileInt(_T("General"), _T("iX"), 0, g_atcIniFile);
	iY = GetPrivateProfileInt(_T("General"), _T("iY"), 0, g_atcIniFile);
	SetWindowPos(hDlg, HWND_TOP, iX, iY, 0, 0, SWP_NOSIZE);
}
 
//------------------------------------------------------------------------------
void OnDestroy(HWND hDlg)
{
	RECT	rc;
 
	GetWindowRect(hDlg, &rc);
	WriteIniFileInt(_T("General"), _T("iX"), rc.left);
	WriteIniFileInt(_T("General"), _T("iY"), rc.top);
}
 
//------------------------------------------------------------------------------
void WriteIniFileInt(TCHAR* ptcSec, TCHAR* ptcKey, int iValue)
{
	TCHAR	atcBuf[16];
 
	_stprintf_s(atcBuf, _T("%d"), iValue);
	WritePrivateProfileString(ptcSec, ptcKey, atcBuf, g_atcIniFile);
}
 

resource.h
#define IDD_MAIN_DIALOG	100
 
#define IDC_STATIC		-1
#define IDC_EDIT_HELLO		1000
#define IDC_BUTTON_WORLD	1001
 

DlgBase2.rc
// リソーススクリプト
 
#include <windows.h>
#include "resource.h"
 
IDD_MAIN_DIALOG DIALOGEX 0, 0, 320, 100
STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX
EXSTYLE WS_EX_APPWINDOW
CAPTION "DlgBase2"
FONT 9, "MS Pゴシック"
BEGIN
	LTEXT		"Hello(&H):",IDC_STATIC,8,8,48,12
	EDITTEXT	IDC_EDIT_HELLO,56,8,48,12,ES_AUTOHSCROLL
	PUSHBUTTON	"World(&W)",IDC_BUTTON_WORLD,104,8,48,12
	DEFPUSHBUTTON	"OK",IDOK,212,76,48,16
	PUSHBUTTON	"Cancel",IDCANCEL,264,76,48,16
END
 
最終更新:2012年09月01日 16:46