Window を左右に分割して表示する

二枚の List Box をウインドウの左右に並べて表示します。

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

プロジェクトの作成

  1. 空の新規プロジェクト(Sprit)を作成します。
    ListStr[] は ListBox に表示するデータです。
    g_hListL, g_hListR は ListBox のハンドルです。
    g_LS,g_RS は左右の ListBox の幅です。
        /***************************************/
        /*★ Split Window Program    前田 稔 ★*/
        /***************************************/
        #define     NAME    "Split Window"
        #include    <windows.h>
    
        LPCTSTR     ListStr[]=
        { "愛知  真唯子",   "青森  孝雄",   "秋田  景子",   "石川  雅夫",   "神戸  真美",
          "名古屋  美幸",   "愛媛  和子",   "和歌山  絢子", "大阪  恵",     "岡山  英子",
          "沖縄  妙子",     "香川  祐子",   "鹿児島  浩司", "神奈川  真路", "岐阜  真実",
          "京都  智史",     "熊本  志保",   "滋賀  佳奈子", "静岡  志依",   "千葉  泉",
          "東京  拓生",     "長崎  英明",   "長野  政則",   "奈良  憲彦",   "兵庫  美佐子",
          "広島  まい",     "福井  真実",   "福岡  大樹",   "北海道  静",   "三重  由香理",
        };
    
        // Defines, constants, and global variables
        HINSTANCE   g_hInst;            //Instance Handle
        HWND        g_hListL;           //List Handle
        HWND        g_hListR;           //List Handle
        long        g_LS,g_RS;          //List の左右の幅
        
  2. WinMain() では ウインドウの背景色を LightGray に設定しています。
        //★ Windows Main
        int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
        {   MSG     msg;
    
            g_hInst = hInst;
            WNDCLASSEX wc = { sizeof(WNDCLASSEX),CS_CLASSDC,WndProc,0L,0L,hInst,NULL,NULL,
                              (HBRUSH)GetStockObject(LTGRAY_BRUSH),NULL,NAME,NULL
                            };
            if (RegisterClassEx(&wc)==0)    return FALSE;
               :
               :
        
  3. WM_CREATE: で左右二枚の ListBox を Window に貼り付けます。
    座標とサイズがゼロになっていますが、実際のサイズは WM_SIZE: で設定します。
    SetInitialData() で List Box にデータを登録します。
        LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
        {   RECT    rc;
                    :
            case WM_CREATE:
                g_hListL = CreateWindow("LISTBOX", NULL,
                        WS_CHILD | WS_VISIBLE | WS_VSCROLL,
                        0, 0, 0, 0, hWnd, NULL, g_hInst, NULL);
                g_hListR = CreateWindow("LISTBOX", NULL,
                        WS_CHILD | WS_VISIBLE | WS_VSCROLL,
                        0, 0, 0, 0, hWnd, NULL, g_hInst, NULL);
                SetInitialData(g_hListL);
                SetInitialData(g_hListR);
                break;
        
  4. Window のサイズが変更されたとき、それに合わせて ListBox のサイズも変更します。
    LOWORD(lp) が Window の幅で、HIWORD(lp) が高さです。
    ListBox の上下左右に少し余裕を取ってサイズを計算しています。
            case WM_SIZE:
                w= LOWORD(lp);
                h= HIWORD(lp);
                g_LS=g_RS= (w-20)/2;
                MoveWindow(g_hListL,4,4,g_LS,h-8,TRUE);
                MoveWindow(g_hListR,g_LS+8,4,g_RS,h-8,TRUE);
                break;
        
  5. マウスのドラッグで Window のサイズを変更してみて下さい。
    Window サイズに従って ListBox のサイズが調整されます。
    全データが ListBox に表示できなくなると、自動的に Scrool Bar が設定されます。

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

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