1.アニメートコントロール
機能:AVIファイルを使って動画させます。
例:Windowsでファイルコピー中に出てくる"あれ"です。
@ AnimateTestというプロジェクト名で、ダイアログベースで生成
A "アニメーション開始"(IDC_BUTTON1)と"アニメーション終了"(IDC_BUTTON2)のボタンを作成
BBOOL CAnimateTestDlg::OnInitDialog()に以下のコードを追加
// TODO: 特別な初期化を行う時はこの場所に追加してください。
// AVIファイルを開く
CAnimateCtrl* pAnimate = (CAnimateCtrl*)GetDlgItem(IDC_ANIMATE1);
pAnimate->Open("filedisk.avi");
// AVIファイルは実行プログラムと同じフォルダに置く
Cリソースから"アニメーション開始"ボタンをダブルクリックし、
void CAnimateTestDlg::OnButton1() に以下のコードを追加
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
CAnimateCtrl* pAnimate = (CAnimateCtrl*)GetDlgItem(IDC_ANIMATE1);
// 無限回繰り返す
pAnimate->Play(0, -1, -1);
Dリソースから"アニメーション終了"ボタンをダブルクリックし、
void CAnimateTestDlg::OnButton2() に以下のコードを追加
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
CAnimateCtrl* pAnimate = (CAnimateCtrl*)GetDlgItem(IDC_ANIMATE1);
// アニメーションを停止する
pAnimate->Stop();
2.ビットマップボタン
機能:通常のボタンコントロールにビットマップを表示します。
例:下の画面を見てください。
@ BitmapButtonTestというプロジェクト名で、ダイアログベースで生成
B ボタンコントロールをIDをIDC_IMAGE、キャプションをIMAGE、オーナー描画にチェックを入れて作成します。
C CBitmapButtonTestDlgのメンバ変数として、以下を追加
CBitmapButton m_BitmapButton;
D BOOL CBitmapButtonTestDlg::OnInitDialog()に以下のコードを追加
int x,y;
switch(message){
case WM_NCHITTEST:
x = LOWORD(lParam);
y = HIWORD(lParam);
return HTNOWHERE;
}
A リソースのビットマップに、IMAGED(桃色),IMAGEF(緑色),IMAGEU(青色),IMAGEX(黄色)を追加
3.ドラッグ&ドロップ
機能:ドロップされたファイルやフォルダのパスをエディットボックス内に表示します。
例:下の画面を見てください。
@ DrugDropTestというプロジェクト名で、ダイアログベースで生成
A リソースのビットマップに、IDC_EDIT1というIDのエディットボックスを追加し、
透過、ドラッグ&ドロップを許可、をチェックする。CDrugDropTestDlgのメンバ変数としてm_MyEditを作成します。
B CEditクラスを基本とした新規クラスを作成する。(ここでは、CMyEditとしています。)
C ClaaWizardよりWM_DOPFILESのハンドラを作成し、以下のコードを追加する。
CString TextString = "";
char FileName[_MAX_PATH];
CMyEdit *pEdit;
CWnd *pWnd = (CWnd*)AfxGetApp()->m_pMainWnd;
pEdit = (CMyEdit*)pWnd->GetDlgItem(IDC_EDIT1);
//FileCntにはDropされたアイコンの数が入る
UINT FileCnt = DragQueryFile(hDropInfo,-1,NULL,0);
for(UINT i = 0;i < FileCnt;++i){
//FileNameにi番目のファイル名が入る
DragQueryFile(hDropInfo,i,FileName,_MAX_PATH);
TextString += FileName;
TextString += "\r\n";
}
pEdit->SetWindowText(TextString);
DragFinish(hDropInfo);
CEdit::OnDropFiles(hDropInfo);
D BOOL CDrugDropTestDlg::OnInitDialog()に以下のコードを追加します。
// TODO: 特別な初期化を行う時はこの場所に追加してください。
m_MyEdit.DragAcceptFiles(TRUE);
4.ファイル選択ダイアログ
機能:ファイル選択ダイアログを表示してファイルを選択できます。
例:下の画面を見てください。
@ FileDialogTestというプロジェクト名で、ダイアログベースで生成
A ボタンをIDをIDC_BUTTON1、エディットボックスをIDC_EDIT1として作成します。
B 追加したボタンのOnClick関数に、以下のコードを追加します。
CEdit *pEdit;
FileDialog dlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,
"すべてのファイル(*.*)|*.*||");
if(dlg.DoModal()==IDOK){
pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
pEdit->SetWindowText(dlg.GetPathName());
}
5.フォルダ選択ダイアログ
機能:フォルダ選択ダイアログを表示してファイルを選択できます。
例:下の画面を見てください。
@ FolderDialogTestというプロジェクト名で、ダイアログベースで生成
A ボタンをIDをIDC_BUTTON1、エディットボックスをIDC_EDIT1として作成します。
B 追加したボタンのOnClick関数に、以下のコードを追加します。
BROWSEINFO bInfo;
LPITEMIDLIST pIDList;
TCHAR szDisplayName[MAX_PATH];
CEdit *pEdit;
// BROWSEINFO構造体に値を設定
bInfo.hwndOwner = AfxGetMainWnd()->m_hWnd; // ダイアログの親ウインドウのハンドル
bInfo.pidlRoot = NULL; // ルートフォルダを示すITEMIDLISTのポインタ
bInfo.pszDisplayName = szDisplayName; // 選択されたフォルダ名を受け取るバッファのポインタ
bInfo.lpszTitle = _T("フォルダの選択"); // ツリービューの上部に表示される文字列
bInfo.ulFlags = BIF_RETURNONLYFSDIRS; // 表示されるフォルダの種類を示すフラグ
bInfo.lpfn = NULL; // BrowseCallbackProc関数のポインタ
bInfo.lParam = (LPARAM)0; // コールバック関数に渡す値
// フォルダ選択ダイアログを表示
pIDList = ::SHBrowseForFolder(&bInfo);
if(pIDList == NULL){
// 戻り値がNULLの場合、フォルダが選択されずにダイアログが閉じられたことを意味します。
}else{
// ItemIDListをパス名に変換します
if(!::SHGetPathFromIDList(pIDList, szDisplayName)){
// エラー処理
}
// szDisplayNameに選択されたフォルダのパスが入っています
pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
pEdit->SetWindowText(szDisplayName);
// 最後にpIDListのポイントしているメモリを開放します
::CoTaskMemFree( pIDList );
}
6.フォント選択ダイアログ
機能:フォント選択ダイアログを表示してフォントを変更できます。
例:下の画面を見てください。
@ FontTestというプロジェクト名で、ダイアログベースで生成
A スタティックテキストをIDC_STATIC、ボタンをIDC_BUTTON1(文字出力),
IDC_BUTTON2(フォントダイアログ)とふたつ作成します。
B 追加したボタンIDC_BUTTON2ののOnClick関数に、以下のコードを追加します。
LOGFONT lf;
// 現在のフォントを取得
GetFont()->GetLogFont(&lf);
// フォントダイアログを表示
CFontDialog dlg(&lf,CF_EFFECTS | CF_SCREENFONTS);
if( dlg.DoModal() == IDOK ){
// 選択したフォントを設定
CFont font;
m_font1.DeleteObject();
m_font1.CreateFontIndirect(&lf);
SetFont(&m_font1);
}
C 追加したボタンIDC_BUTTON1ののOnClick関数に、以下のコードを追加します。
// デバイスコンテキストの用意。
CClientDC dc(this);
CFont* pFont;
CFont font;
// フォントを作成する
font.CreateFont(
20, // フォントの高さ(大きさ)。
0, // フォントの幅。普通0。
0, // 角度。0でOK。
0, // 同じく角度。これも0。
FW_DONTCARE, // 文字の太さ。
FALSE, // フォントがイタリックならTRUEを指定。
FALSE, // 下線を引くならTRUE。
FALSE, // 取り消し線を引くならTRUE。
SHIFTJIS_CHARSET, // フォントの文字セット。このままでOK。
OUT_DEFAULT_PRECIS, // 出力精度の設定。このままでOK。
CLIP_DEFAULT_PRECIS, // クリッピング精度。このままでOK。
DRAFT_QUALITY, // フォントの出力品質。このままでOK。
DEFAULT_PITCH, // フォントのピッチとファミリを指定。このままでOK。
_T("MS Pゴシック") // フォントのタイプフェイス名の指定。これは見たまんま。
);
// フォントを設定。
pFont = dc.SelectObject(&font);
dc.SetTextColor(RGB(255, 255, 0));
dc.SetBkColor(RGB(255, 00, 00));
dc.TextOut(50, 50, _T("あいうえお"));
// フォントを元に戻す。
dc.SelectObject(pFont);
CStatic *StaticText;
StaticText = (CStatic*)GetDlgItem(IDC_STATIC);
StaticText->SetFont(&m_font1,TRUE);
StaticText->SetWindowText("テストてすと");
このページ内のリンク