0

MFC プログラムに次のようなコードがあります。

    HANDLE newhandle = m_hWnd;    //A

    //draw the bitmap image on the window        
    BITMAP* bi = new BITMAP;
    CBitmap bmp;
    bmp.Attach(transferbitmap);
    CClientDC dc(newhandle);      //B
    //...
    //...
    //...

「A」行で、newhandle という名前の HANDLE を作成し、タイプ CWnd* のm_hWndに設定します。この行だけで (Visual Studio 2010 を使用して) 正常にコンパイルされ、動作するようです。ただし、行 'B' を見ると、m_hWnd の代わりに newhandle を使用しようとすると、コンパイル エラーが発生します。

エラー C2664: 'CClientDC::CClientDC(CWnd*)': パラメーター 1 を 'HANDLE' から 'CWnd*' に変換できません

newhandle の代わりに m_hWnd を使用すると、プログラムは正常にコンパイルおよび実行されます。

私の質問は、(are) です。なぜコンパイラは newhandle を CWnd* に設定できるのに、それを使用しようとするとエラーが発生するのですか? さらに、コードの下位レベルからすべての MFC 固有のコードを削除しようとしているため、MFC 以外のウィンドウ ハンドルを使用して m_hWnd を置き換える方法はありますか?

4

0 に答える 0