ファイルが存在しない場合は 0xFFFFFFFF を返す。DWORD GetFileAttributes( LPCTSTR lpFileName // pointer to the name of a file or directory );
ただし、 この API を使うには Internet Explorer 4.0 以降が インストールされた環境が必要。BOOL PathFileExists( LPCTSTR lpszPath );
protected:
NOTIFYICONDATA m_stNtfyIcon;
をメンバ変数として追加。
CMyDialog::OnInitDialog あたりに
/////////////////////////////////////////////////
// アイコンをタスクトレイに表示します。
m_stNtfyIcon.cbSize = sizeof( NOTIFYICONDATA );
m_stNtfyIcon.uID = 0;
m_stNtfyIcon.hWnd = m_hWnd;
m_stNtfyIcon.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
m_stNtfyIcon.hIcon = AfxGetApp()->LoadIcon( IDR_MAINFRAME );
m_stNtfyIcon.uCallbackMessage = WM_USER_NTFYICON;
lstrcpy( m_stNtfyIcon.szTip, _T( "テスト" ) );
::Shell_NotifyIcon( NIM_ADD, &m_stNtfyIcon );
アイコンの削除
CMyDialog::OnDestroy あたりに
//タスクトレイのアイコンを削除します。
::Shell_NotifyIcon( NIM_DELETE, &m_stNtfyIcon );
タスクトレイ上のアイコンに操作があった場合の処理
LRESULT CMyDialog::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch( message )
{
case WM_USER_NTFYICON: //アイコンからのメッセージ。
{
if( lParam == WM_LBUTTONDOWN ){
// 左クリック時の処理
}
else if( lParam == WM_RBUTTONDOWN ){
// 右クリック時の処理
}
}
return 0;
}
return CDialog::WindowProc(message, wParam, lParam);
}
参考のページで、ICONハンドルが取れる。HICON hIcon = ::ExtractIcon( AfxGetInstanceHandle(), szFileName, i ) ;
SHFILEINFO sfi; DWORD dwRet; HICON hIcon; // タイトルの拾得 dwRet = ::SHGetFileInfo( szFileName, 0, &sfi, sizeof(SHFILEINFO FAR), SHGFI_DISPLAYNAME ); // sfi.szDisplayName; // 小さいアイコンの拾得 dwRet = ::SHGetFileInfo( szFileName, 0, &sfi, sizeof(SHFILEINFO FAR), SHGFI_ICON | SHGFI_SMALLICON ); // sfi.hIcon // 大きいアイコンの拾得 dwRet = ::SHGetFileInfo( szFileName, 0, &sfi, sizeof(SHFILEINFO FAR), SHGFI_ICON | SHGFI_LARGEICON ); // sfi.hIcon
ANIMATIONINFO info;
int iMinAnimate;
info.cbSize = sizeof( ANIMATIONINFO );
::SystemParametersInfo( SPI_GETANIMATION, sizeof(info), (PVOID)&info, 0 );
if( info.iMinAnimate ){
info.iMinAnimate = 0;
::SystemParametersInfo( SPI_SETANIMATION, sizeof(info), (PVOID)&info,
SPIF_SENDCHANGE );
::EnumWindows(EnumWindowsProc, 0);
info.iMinAnimate = 1;
::SystemParametersInfo( SPI_SETANIMATION, sizeof(info), (PVOID)&info,
SPIF_SENDCHANGE );
}
else{
::EnumWindows(EnumWindowsProc, 0);
}
コールバック関数は以下のようになる。
static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam )
{
if( ::IsIconic( hwnd ) == 0) {
if( ( GetWindowLong( hwnd, GWL_STYLE ) & WS_VISIBLE ) ){
if(! (GetWindowLong(hwnd,GWL_EXSTYLE) & WS_EX_TOOLWINDOW) ){
::ShowWindowAsync(hwnd, SW_SHOWMINNOACTIVE );
}
}
}
return TRUE;
}
MFCTRACE("メッセージ \n");ATL_RPT0(_CRT_WARN, "メッセージ \n");
次にVisual Studio を起動した時から、 設定が有効になる。intptr_t uintptr_t size_t