1 ShowWindow

nCmdShow:指定如何显示CWnd。它必须是下列值之一

  • SW_HIDE 隐藏此窗口并将激活传递给另一个窗口。
  • SW_MINIMIZE 最小化窗口并激活系统列表中的顶级窗口。
  • SW_RESTORE 激活并显示窗口。如果窗口被最小化或最大化,窗口会将其恢复到原来的大小和位置。
  • SW_SHOW 激活窗口并显示其当前大小和位置。
  • SW_SHOWMAXIMIZED 激活窗口并将其显示为最大化窗口。
  • SW_SHOWMINIMIZED 激活窗口并将其显示为图标。
  • SW_SHOWMINNOACTIVE 将窗口显示为图标。当前处于活动状态的窗口将保持活动状态。
  • SW_SHOWNA 显示窗口的当前状态。当前处于活动状态的窗口将保持活动状态。
  • SW_SHOWNOACTIVATE 显示窗口的最新大小和位置。当前处于活动状态的窗口将保持活动状态。
  • SW_SHOWNORMAL 激活并显示窗口。如果窗口被最小化或最大化,窗口会将其恢复到原来的大小和位置。
    1. mydlg.Create(IDD_DIALOG1); //使用ShowWindow必须先Create
    2. mydlg.ShowWindow(SW_SHOW);

    2 Domodal

    使用模态模式弹出,无法操作其他窗口,除非在一个新线程内调用 ```cpp // 唯一的 CMFCDLLApp 对象 CMFCDLLApp theApp; CMainDialogWnd *pMainDialog;

// 显示窗口 线程函数 DWORD WINAPI MyThreadProc(LPVOID lpParameter) { //添加显示窗口的代码 pMainDialog = new CMainDialogWnd; pMainDialog->DoModal(); //阻塞在这里,除非关掉才能往下执行

  1. //关闭此窗口后先删掉指针,再释放dll,退出线程
  2. delete pMainDialog;
  3. FreeLibraryAndExitThread(theApp.m_hInstance,1);
  4. return TRUE;

}

// CMFCDLLApp 初始化 BOOL CMFCDLLApp::InitInstance() { CWinApp::InitInstance(); ::CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)MyThreadProc, NULL, NULL, NULL); //::表示是调用的是系统API来创建的线程,而不是CWinThread类函数 return TRUE; } ```