1 ShowWindow
nCmdShow:指定如何显示CWnd。它必须是下列值之一
- SW_HIDE 隐藏此窗口并将激活传递给另一个窗口。
- SW_MINIMIZE 最小化窗口并激活系统列表中的顶级窗口。
- SW_RESTORE 激活并显示窗口。如果窗口被最小化或最大化,窗口会将其恢复到原来的大小和位置。
- SW_SHOW 激活窗口并显示其当前大小和位置。
- SW_SHOWMAXIMIZED 激活窗口并将其显示为最大化窗口。
- SW_SHOWMINIMIZED 激活窗口并将其显示为图标。
- SW_SHOWMINNOACTIVE 将窗口显示为图标。当前处于活动状态的窗口将保持活动状态。
- SW_SHOWNA 显示窗口的当前状态。当前处于活动状态的窗口将保持活动状态。
- SW_SHOWNOACTIVATE 显示窗口的最新大小和位置。当前处于活动状态的窗口将保持活动状态。
- SW_SHOWNORMAL 激活并显示窗口。如果窗口被最小化或最大化,窗口会将其恢复到原来的大小和位置。
mydlg.Create(IDD_DIALOG1); //使用ShowWindow必须先Create
mydlg.ShowWindow(SW_SHOW);
2 Domodal
使用模态模式弹出,无法操作其他窗口,除非在一个新线程内调用 ```cpp // 唯一的 CMFCDLLApp 对象 CMFCDLLApp theApp; CMainDialogWnd *pMainDialog;
// 显示窗口 线程函数 DWORD WINAPI MyThreadProc(LPVOID lpParameter) { //添加显示窗口的代码 pMainDialog = new CMainDialogWnd; pMainDialog->DoModal(); //阻塞在这里,除非关掉才能往下执行
//关闭此窗口后先删掉指针,再释放dll,退出线程
delete pMainDialog;
FreeLibraryAndExitThread(theApp.m_hInstance,1);
return TRUE;
}
// CMFCDLLApp 初始化 BOOL CMFCDLLApp::InitInstance() { CWinApp::InitInstance(); ::CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)MyThreadProc, NULL, NULL, NULL); //::表示是调用的是系统API来创建的线程,而不是CWinThread类函数 return TRUE; } ```