ホーム  ざれごと  ワシントン州  ツール  NT豆知識  Win32プログラミングノート  私的用語  ジョーク  いろいろ  ゲーム雑記  Favorites  掲示板   Mail

Win32プログラミングノート --デバイス--

Last modified: Sat Apr 05 04:42:12 2003 PDT

一つ上へ

ここでの記述は、Visual C++(tm) Ver.5.0Jを元にしています

デバイスの変更通知を受け取る

Windows 95/NT4.0以降では、デバイスの状況に変化が起きたとき、トップレベルウィンドウに WM_DEVICECHANGE メッセージが送られます。 例えば、CD-ROMが挿入された、あるいはイジェクトされたような場合です。 MFC4.2xには、このメッセージに対応する ON_WM_DEVICECHANGE() マクロが存在しますが、ClassWizardでは現れません。 CWnd::OnDeviceChange()って、ちゃんとヘルプにも載ってるのになぁ。 アクティブドキュメントやアクティブビューに、メッセージがルーティングされることもありません。 だからでしょうきっと。

ということで、MFCアプリケーションでは、CMainFrameクラスで ON_WM_DEVICECHANGE() を実装し、さらにメッセージルーティングもどきの処理を行う必要があります。 例えば、次のようになるでしょう。

BOOL CMainFrame::OnDeviceChange(UINT nEventType, DWORD dwData)
{
    // デバイスに変更があった
    const MSG* msg = GetCurrentMessage();
    GetActiveView()->SendMessage(msg->message, msg->wParam, msg->lParam);
    BOOL r = CFrameWnd::OnDeviceChange(nEventType, dwData);
    return r;
}
言うまでもありませんが、上記の例では、ビューにも ON_WM_DEVICECHAGE() を実装する必要があります。

上記はSDIの例ですが、 MDIの場合ならば、さらにGetActiveFrame()を呼び出し、結果がNULLかどうかを調べてから GetActiveView()なりGetActiveDocument()なりを呼び出す必要があります。蛇足ですね(^_^;。


ドライブ情報の取得

GetLogicalDriveStrings() とか、 GetDriveType() とか、 GetVolumeInformation() とかが使い勝手が良さそうです。 詳細はオンラインヘルプで見てね。
Since 1996

一つ上へ

ホーム  ざれごと  ワシントン州  ツール  NT豆知識  Win32プログラミングノート  私的用語  ジョーク  いろいろ  ゲーム雑記  Favorites  掲示板   Mail