ファイルが存在しない場合は 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