初日 最新 目次 MAIL HOME


*-- To Tell The Truth --*
Cruz
MAIL
HOME

My追加

2001年06月22日(金)
ダイアログからリストビュー表示

本日はお仕事編。

悩んでしまったよ。
ダイアログのログイン画面からボタンを押すと、リストビュー画面を表示させるの。
なんとかできたので覚え書。

+++++++++++

まずはダイアログのプロシージャー

LRESULT CALLBACK TopDlgProc(
 HWND hWnd,
 UINT message,
 WPARAM wParam,
 LPARAM lParam)
{
 HACCEL hAccel;
 MSG msg;

 switch(message)
 {
  case WM_DESTROY:
   EndDialog(hWnd, FALSE);
   return TRUE;

  case WM_COMMAND:
   switch(LOWORD(wParam))
   {
    case IDC_TOP_WATCH:
     // ログイン画面を閉じる
     EndDialog(hWnd, FALSE);

     if (!InitApp())
      return FALSE;
     if (!InitInstance(hWnd))
      return FALSE;

     hAccel = LoadAccelerators(
            hInst1,
            MAKEINTRESOURCE(IDR_ALLWATCH_MENU));


     while(GetMessage(&msg, NULL, 0, 0)){
      if(!TranslateAccelerator(hWnd, hAccel, &msg)){
       TranslateMessage(&msg);
       DispatchMessage(&msg);
      }
     }

     return TRUE;

    case IDC_TOP_CONTROL:
     // ログイン画面を閉じる
     EndDialog(hWnd, FALSE);

     cmn_InitDlg();
     DialogBox(hInst1,
         MAKEINTRESOURCE(IDD_CONTROL_MENU),
         hWnd, (DLGPROC)ControlProc);
     return TRUE;
    ・
    ・
    ・
    以下略
   }
   break;

 }
 return FALSE;
}

// リスト
BOOL InitApp()
{
 WNDCLASSEX wc;
 wc.cbSize = sizeof(WNDCLASSEX);
 wc.style = CS_HREDRAW | CS_VREDRAW;
 wc.lpfnWndProc = AllMonitorProc; //プロシージャ名
 wc.cbClsExtra = 0;
 wc.cbWndExtra = 0;
 wc.hInstance = hInst1; //インスタンスは外部定義
 wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 wc.hCursor = LoadCursor(NULL, IDC_ARROW);
 wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 wc.lpszMenuName = MAKEINTRESOURCE(IDR_ALLWATCH_MENU);
 wc.lpszClassName = (LPCSTR)szClassName;
 wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
 return (RegisterClassEx(&wc));
}

//ウィンドウの生成
BOOL InitInstance(HWND hWnd)
{
 HWND hAllLV;

 hAllLV = CreateWindow(szClassName,
   "List Disp", // リストバーに表示される
   WS_OVERLAPPEDWINDOW, //ウィンドウの種類
   CW_USEDEFAULT,   //X座標
   CW_USEDEFAULT,   //Y座標
   CW_USEDEFAULT,   //幅
   CW_USEDEFAULT,   //高さ
   NULL, //親ウィンドウのハンドル、親を作るときはNULL
   NULL, //メニューハンドル、クラスメニューを使うときはNULL
   hInst1, //インスタンスハンドル
   NULL);
 if(!hAllLV)
  return FALSE;

 ShowWindow(hAllLV, nCmdShow);
 UpdateWindow(hAllLV);
 return TRUE;
}

そしてリストビュープロシージャで・・・

LRESULT CALLBACK AllMonitorProc(
 HWND hWnd,
 UINT message,
 WPARAM wParam,
 LPARAM lParam)
{
 int id;

 switch(message)
 {
  case WM_CREATE:
    cmn_InitDlg();
    hList = CreateWindowEx(0,
       WC_LISTVIEW,
       "List View",
       WS_CHILD | WS_VISIBLE | LVS_REPORT,
       0, 0, 0, 0,
       hWnd,
       (HMENU)ID_LISTVIEW,
       hInst1,
       NULL);
    break;
  ・
  ・
  ・
  以下略
 }
 return 0L;
}

どっかで
#define ID_LISTVIEW 100
を宣言しておきましょう。

+++++++++++

本日の悩みどころは、ダイアログをマクロ(DialogBox(・・・))で表示させるのと違って、自分でグルグル回って待たせないといけなかったところ。