開発環境 |
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