ドラッグ&ドロップで画像を表示

説明の画像

ドラッグ&ドロップされた画像ファイルの名前を取得して、画像の大きさに合わせて表示します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. BMP Object Class を使ってプログラムを作成します。
    BMP Object Class は BMP Object Class で画像を表示する を参照して下さい。
  2. Bmp.h をインクルードして下さい。
    BMP *Bmp が BMP Object Class の定義です。
    szFile はドラッグ&ドロップされた画像ファイル名を格納する領域です。
        #include    "Bmp.h"
    
        HINSTANCE   g_hInst;
        HWND        g_hWnd;
        BMP         *Bmp= NULL;         //BMP Object
        LPSTR       szFile;             //オープンするファイル名(パス付き)
        
  3. ドラッグ&ドロップしたファイルの名前は lpCmdLine で渡されます。
    lpCmdLine で渡された文字列を MessageBox で表示してみて下さい。
        int APIENTRY  WinMain(HINSTANCE hInst, HINSTANCE, LPSTR lpCmdLine, int nCmdShow)
        {   MSG         msg;
    
            g_hInst= hInst;
            szFile= lpCmdLine;
        
  4. WM_CREATE: で BMP Object Class をインスタンス化して Bmp->Load() で画像をロードします。
    Bmp->Adjust() で画像サイズに合わせてウインドウの大きさを設定します。
    このタイミングでは g_hWnd に まだハンドルが格納されていない ので要注意です。
            case WM_CREATE:
                Bmp= new BMP(hWnd);
                Bmp->Load(szFile);
                Bmp->Adjust();
                break;
        
  5. WM_PAINT に画像を描画するコードを記述します。
    画像の描画はメンバー関数 Bmp->Show() を呼ぶだけです。
            case WM_PAINT:
                hdc= BeginPaint (hWnd, &ps);
                Bmp->Show(0,0);
                EndPaint(hWnd, &ps);
                break;
        
  6. プログラムを終了する前に Object を開放して下さい。
            case WM_DESTROY:
                if (Bmp)
                {   delete(Bmp);
                    Bmp= NULL;
                }
                PostQuitMessage(0);
                return 0L;
        
  7. BMP Object Class にウインドウサイズを設定するメンバー関数を追加して下さい。
    ウインドウサイズの設定は、次の関数で行います。
    メニューバーを使っているときは TRUE を、使っていない時は FALSE を渡します。
        RECT    rc;
    
        GetWindowRect(hWnd, &rc);
            :
        //AdjustWindowRect(&rc,WS_OVERLAPPEDWINDOW,TRUE);
        AdjustWindowRect(&rc,WS_OVERLAPPEDWINDOW,FALSE);
        MoveWindow(hWnd,x,y,rc.right-rc.left,rc.bottom-rc.top,TRUE);
        
  8. [デバッグ]を選択してビルドに続いて実行を行います。
    実行が始まるとメッセージボックスが表示されるだけで画像は表示されません。
    画像を表示するにはプログラムに画像をドラッグ&ドロップして下さい。
    ページ先頭の画像がプログラムの起動方法で、デスクトップに貼り付けたプログラムに画像ファイルを ドラッグ&ドロップしています。
    Windows の 標準画像ファイルは BMP 形式で JPG や GIF は表示できないので注意して下さい。

【演習】

  1. BMP Object Class を作成して、プログラムを完成させて下さい。
  2. WinMain() で lpCmdLine で渡された文字列を MessageBox で表示してみて下さい。
    CmdLine の取得は Command Line を取得する を参照して下さい。
    様々なフォルダーから BMP ファイルをドラッグして lpCmdLine を確認して下さい。
  3. 空白が含まれているフォルダーからドラッグ&ドロップしたときは要注意です。
    lpCmdLine で渡された文字列を表示すれば解るのですが、両側が「" "」で囲まれています。
    関数に渡すときは、これを取り除かなくてはなりません。
    ファイル名を編集するときは lpCmdLine を作業領域にコピーしてから行って下さい。
    Command Line で渡された領域は、直接変更しないようにするのがルールです。
超初心者の方は ★Object Class Library から提供している Image Object Class を使って下さい。
Image Object Class には Adjust() 関数が備わっています。

超初心者のプログラム入門(Win32API C++)