15,472
社区成员
发帖
与我相关
我的任务
分享
BOOL CBDlg::DoLoop()
{
MSG msg;
while(1)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if(msg.message==WM_QUIT)
{
MessageBox(_T("收到WM_QUIT消息,即将quit while"),_T("注意了"),MB_OK);
break;
}
// 处理Tip消息,m_bt为我的一个按钮类对象
m_bt.m_toolTip.Activate (TRUE);
m_bt.m_toolTip.RelayEvent (&msg);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
//在这里添加空闲任条处理
Sleep(100);
}
}
return TRUE;
}
LRESULT CBDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
/*请大家帮忙注意看我写的代码,是否存在问题??? */
switch(message)
{
case WM_CLOSE:
MessageBox(_T("收到WM_CLOSE消息,即将调用 DestroyWindow(hwnd);"),_T("注意了"),MB_OK);
DestroyWindow();
break;
case WM_DESTROY:
MessageBox(_T("已调用过DestroyWindow(hwnd),看不到窗口了吧;"),_T("注意了"),MB_OK);
MessageBox(_T("以下处理WM_DESTROY"),_T("注意了"),MB_OK);
PostQuitMessage(0);
break;
case WM_SYSCOMMAND:
if((LOWORD(wParam)&0xFFF0) == SC_CLOSE)
{
MessageBox(_T("你关闭了窗口,即将发送WM_CLOSE消息!"),_T("注意了"),MB_OK);
SendMessage(WM_CLOSE,0,0);
}
//不要添加 break,否则不能响应其它WM_SYSCOMMAND消息
}
return CDialog::WindowProc(message, wParam, lParam);
}
BOOL CTestApp::InitInstance()
{
…………
…………
// 前略,和40楼的代码一致
m_bCreateSuc = TRUE;
//-----------------------------------------------------------------------------------//
// 等待主对话框创建成功后,初始界面对话框B
// 方法1. 通过UI线程创建
//OpenStPage();
// 方法2. 通过模式对话框DoModal创建
m_pStPageDlg = new CFriendBookADODlg;
m_pStPageDlg->DoModal();
return TRUE;
void CFriendBookADODlg::OnButtonAbout()
{
CAboutDlg dlg;
dlg.DoModal();
}
void CTestDlg::OnDestroy()
{
m_pCovThread->PostThreadMessage(WM_QUIT, 0, 0);
CDialog::OnDestroy();
}
//////////////////////////////////////////////////////////////////////////////
//名称:DoLoop
//功能:实现窗体消息循环
/////////////////////////////////////////////////////////////////////////////
BOOL CMyDlg::DoLoop()
{
MSG msg;
while(1)
{
if(PeekMessage(&msg, NULL, 0,0, PM_REMOVE))
{
if(msg.message == WM_QUIT)
{
MessageBox(_T("收到WM_QUIT消息,即将quit while"),_T("注意了"),MB_OK);
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
//在这里添加空闲任条处理
Sleep(100);
}
}
return TRUE;
}
BOOL CCOverThread::InitInstance()
{
m_pOwner->m_pCoverDlg = new CCOverDlg;
m_pOwner->m_pCoverDlg->m_pMainPage = m_pOwner;
m_pOwner->m_pCoverDlg->Create(IDD_COVER_DIALOG, NULL);
m_pOwner->m_pCoverDlg->PaintWindow();
m_pMainWnd = m_pOwner->m_pCoverDlg;
return TRUE;
}
int CCOverThread::ExitInstance()
{
if(m_pOwner->m_pCoverDlg != NULL)
{
m_pOwner->m_pCoverDlg->DestroyWindow();
//按此方式删除,可是在利用如下代码
///////////////////////////////////////
void CAdoRWAccessDlg::OnCancel()
{
CDialog::OnCancel();
DestroyWindow();
}
///////////////////////////////////////
//退出主程序的时候,一直不能进入
int CCOverThread::ExitInstance()这个函数内。想不明白是为什么,感觉很茫然。
delete m_pOwner->m_pCoverDlg;
m_pMainWnd = NULL;
}
return CWinThread::ExitInstance();
}
CFriendBookADOApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CFriendBookADOApp initialization
BOOL CTestApp::InitInstance()
{
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
//-----------------------------------------------------------------------------------//
//1.必须新开一线程打开启动页面
::AfxBeginThread(OpenBgPageThread, this, THREAD_PRIORITY_HIGHEST);
//2.创建主对话框
m_pMainDlg = new CAdoRWAccessDlg(IDD_ADORWACCESS_DIALOG);
m_pMainWnd = m_pMainDlg;
srand( (unsigned)time(NULL));
int i = rand()% 2;
i=1;
//-----------------------------------------------------------------------------------//
// 随机打开不同风格内页面
if (i == 0)
{
m_pMainDlg->m_nBkgndMode = 1;
m_pMainDlg->Create(IDD_ADORWACCESS_DIALOG, NULL);
}else{
m_pMainDlg->m_nBkgndMode = 2;
m_pMainDlg->Create(IDD_ADORWACCESS_DIALOG1,NULL);
}
//标示主对话框创建完成
m_bCreateSuc = TRUE;
//-----------------------------------------------------------------------------------//
//3.等待主对话框创建成功后,打开页面B
OpenStPage();
return TRUE;
}
// 目前做了如下改动,这个时候,发现一切正常了!
void CTestApp::OpenStPage()
{
m_pStPageDlg = new CFriendBookADODlg;
CWinThread* pThread=::AfxBeginThread(OpenStPageThread, (LPVOID)m_pStPageDlg, THREAD_PRIORITY_HIGHEST);
}
UINT CTestApp::OpenStPageThread(LPVOID lpv)
{
if(lpv == NULL)
{
AfxMessageBox(_T("ERROR"), MB_OK| MB_ICONERROR);
::AfxEndThread(2);
return -1;
}
CFriendBookADODlg* dlg = (CFriendBookADODlg*)lpv;
dlg->Create(IDD_FRIENDBOOKADO_DIALOG, CWnd::GetDesktopWindow());
dlg->ShowWindow(SW_SHOW);
dlg->DoLoop();
AfxMessageBox("quit loop!");
delete dlg;
::AfxEndThread(0);
return 0;
}
UINT CTestApp::OpenBgPageThread(LPVOID lpv)
{
CBeginDlg dlg;
dlg.DoModal();
::AfxEndThread(0);
return 0;
}