■ CommonDialog を利用する( 共通の Dialog )
DESC
Windows95 から追加されたプリセットのコントロール( GUI部品 )のこと
OPENFILENAME work set
GetOpenFileName();
TrackBar
ProgressBar
CreateWindow(), 専用の作成 API でつくる
Event の通知は WM_NOTIFY でされる
WARNING
Resource として記述できない
DEP
commctrl.h
// DLL を呼ぶための ImportLibrary
comctl32.lib
// 実装のある場所
comctl32.dll
if ( msg == WM_CREATE ) {
INITCOMMONCONTROLSEX cc;
cc.dwSize = sizeof( INITCOMMONCONTROLSEX );
cc.dwICC = ICC_DATE_CLASSES;
// Common Control DLL の初期化
InitCommonControlsEx( &cc );
// TB_
}
MyDialog DIALOG 300, 300, 200, 200
CAPTION "タイトル"
FONT 9, "MS UI Gothic"
{
// デフォルトボタン
DEFPUSHBUTTON "ボタンを押してね", 101, 10, 10, 100, 20, WS_GROUP
EDITTEXT 102, 95, 56, 30, 11, ES_NUMBER
// カレンダー コントロール
CONTROL "", 1072, "SysMonthCal32", MCS_NOTODAY | MCS_NOTODAYCIRCLE | WS_TABSTOP, 10, 50, 117, 89
}
■ InitCommonControlsEx
SYNTAX
BOOL InitCommonControlsEx(
LPINITCOMMONCONTROLSEX lpInitCtrls // 登録対象のクラスの情報
);
DESC
コモンコントロールのダイナミックリンクライブラリ(DLL)に含まれている
特定のコモンコントロールクラスを登録する
WARNING
InitCommonControlsEx() を呼び出すたびに、その効果は累積する
ICC_UPDOWN_CLASSフラグを指定して InitCommonControlsEx 関数を呼び出し
次に ICC_HOTKEY_CLASSフラグを指定してこの関数を呼び出すと
アップダウンとホットキーの各コモンコントロールクラスが登録され
アプリケーションから利用できるようになる。
■ ファイルダイアログ
SYNTAX
GetOpenFileName( OPENFILENAME *on );
GetSaveFileName( OPENFILENAME *on );
RET
!0 : SUCCESS
0 : ERROR | Cancel | Close | Buffer が小さすぎる.
DESC
[ファイルを開く]ダイアログボックスを作成する。
OPENFILENAME にパラメータをセットして利用する
構造体は memset で 0 にしておくのが無難。
// WARNING : init "" しないと ERROR
char str[ NAME_SIZE ] = "";
OPENFILENAME fn;
memset( &fn, 0, sizeof(OPENFILENAME) );
fn.lStructSize = sizeof( OPENFILENAME );
// ParentWindow < -> Edit でいい
// なくても OK
fn.hwndOwner = HWND_DESKTOP;
// Filter 文字列
// 区切り文字[\0] : [\0\0] 終了マーク
fn.lpstrFilter = "Text files {* .txt}\0*.txt\0"
"HTML files {*.htm}\0*.htm;*.html\0"
"All files {*.*}\0*.*\0\0";
// うけとる File 名( Path つき ) sz 指定
fn.lpstrFile = str;
fn.nMaxFile = NAME_SIZE;
// タイトル名と大きさ
fn.lpstrTitle = TEXT("タイトル 自分で開く");
fn.nMaxFileTitle = NAME_SIZE;
// FILE は存在しないといけない
fn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
// Default 拡張子( 必須ではない )
fn.lpstrDefExt = TEXT("txt");
// == 0 で Cancell
if ( GetOpenFileName( &fn ) == 0 ) return 0;
else {
// File の FullPath がかえる
MessageBox( NULL, str, str, MB_OK );
}
■ GetFileInformationByHandle