窗体中某个位置,显示多个对话框当点击某中数据,使不同的窗体显示出来我使用setwindowpos,可是不能正确得到我想要的求助
解决方案 »
- 请问下VC如何关闭已经弹出的messagebox消息框
- 关于MFC中树控件的选中焦点问题
- 咨询:MFC单文档视图内嵌入基于对话框的EXE程序
- dll与exe通讯中postmessage和sendmessage的问题。
- MFC请问怎样实现资源管理器左边的浏览窗口的功能?
- 到了上海二个多月,工作现在才算稳定下来,好久没有,积了好多分,给个简单问题,散分
- 关于串口通讯的弱问题
- 有没有介绍Visual SourceSafe的书
- 一个关于在VC++中使用API的问题
- 谁知道怎么再CTabCtrl中加Image?
- 急!急!串口与C51通信,实时画波形!大家帮帮忙
- 怎么使用CListCtrl控件的GetItemRect方法?
// 描 述: 添加子窗口页
//
// 参 数:
// uID 对话框模板 ID
// 返 回 值:
//-----------------------------------------------------------------------------
void CPageManager::AddPage(CDialogPage *pDlg, UINT uIDD)
{
pDlg->Create(pDlg->m_uTemplateID, m_pParentDialog); if (uIDD != 0)
m_uPageID[m_uPageCount] = uIDD;
else
m_uPageID[m_uPageCount] = pDlg->m_uTemplateID; m_pDialogPage[m_uPageCount] = pDlg; m_uPageCount ++;
}//-----------------------------------------------------------------------------
// 描 述: 切换显示页面
//
// 参 数:
// 返 回 值:
//-----------------------------------------------------------------------------
void CPageManager::SwitchPage(UINT uIDD)
{
CDialogPage *pPage; if (m_uCurrentPage == uIDD)
return; if (m_uCurrentPage != 0)
{
pPage = GetPage(m_uCurrentPage);
if (pPage)
pPage->ShowWindow(SW_HIDE); pPage->OnPageHide();
pPage->m_bVisible = FALSE;
} pPage = GetPage(uIDD);
if (pPage)
{
pPage->ShowWindow(SW_SHOW);
pPage->OnPageShow();
pPage->m_bVisible = TRUE;
} m_uCurrentPage = uIDD;
}
// 描 述: 调整所有页面窗口的位置以适合指定客户区大小
//
// 参 数:
// 返 回 值:
//-----------------------------------------------------------------------------
void CPageManager::AdjustPosition(LPRECT pRect)
{
CRect rcPosition(pRect); for (UINT u = 0; u < m_uPageCount; u ++)
m_pDialogPage[u]->MoveWindow(rcPosition.left, rcPosition.top,
rcPosition.Width(), rcPosition.Height(), FALSE);
}
int CThemeProduceDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
// 连接数据库
if ( ! g_objDataKernel.ConnectMDB())
{
AfxMessageBox(_T("打开数据库失败"), MB_OK|MB_ICONWARNING);
return -1;
} // 创建真彩色工具栏
if ( ! CreateToolBar() )
return -1; m_mgrChildPages.AddPage(&m_dlgLibInfo);
m_mgrChildPages.AddPage(&m_dlgLibAppend);
m_mgrChildPages.AddPage(&m_dlgPaperInfo);
m_mgrChildPages.AddPage(&m_dlgPaperManu);
m_mgrChildPages.AddPage(&m_dlgPaperAuto);
return 0;
}void CThemeProduceDlg::OnCMDPaperAuto()
{
m_mgrChildPages.SwitchPage(IDD_DIALOG_PAPER_AUTO);
SwitchToolBarButton(ID_PAPER_AUTO);
}void CThemeProduceDlg::AdjustPagePosition()
{
CRect rcPage;
CRect rcPos;
CRect rcOffset(0, 0, 0, 0); m_staticBorder.GetClientRect(rcPage);
m_staticBorder.ClientToScreen(rcPage);
ClientToScreen(rcOffset);
rcPos.SetRect(rcPage.left - rcOffset.left, rcPage.top - rcOffset.top,
rcPage.left - rcOffset.left + rcPage.Width(),
rcPage.top - rcOffset.top + rcPage.Height());
rcPos.DeflateRect(2, 2, 2, 2);
m_mgrChildPages.AdjustPosition(rcPos);
}
// 初始化树和窗体 CRect rectDlg;
m_rectCtrl.GetWindowRect(&rectDlg);
ScreenToClient(&rectDlg);
POSITION pos;
pos = m_strListTreeParentItem.GetHeadPosition();
CString strTemp;
while(pos)
{
strTemp = m_strListTreeParentItem.GetNext(pos);
if(strTemp.IsEmpty())
continue; m_tree.InsertItem(strTemp);
CDlgPropertiesChild *pDlg = new CDlgPropertiesChild();
pDlg->Create(CDlgPropertiesChild::IDD,this);
pDlg->SetWindowPos(&wndTop,rectDlg.left,rectDlg.top,rectDlg.Width(),rectDlg.Height(),SWP_HIDEWINDOW );
m_mapStringToDlg.SetAt(strTemp,pDlg);
}//------------------------------------------------
// 相应CTreeCtrl ,OnSelchanged事件void CDlgProperties::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
TVITEM item = pNMTreeView->itemNew; HTREEITEM hItem = NULL,hParentItem = NULL;
hParentItem = m_tree.GetParentItem(item.hItem); CString strDlgName;
if(hParentItem != NULL)
strDlgName = m_tree.GetItemText(hParentItem);
else
strDlgName = m_tree.GetItemText(item.hItem); void * pDlg = NULL;
m_mapStringToDlg.Lookup(strDlgName,pDlg); if(pDlg != NULL)
{
ControlDataToDlg((CDlgPropertiesChild*)pDlg,strDlgName);
::ShowWindow(((CDlgPropertiesChild*)pDlg)->m_hWnd,SW_RESTORE);
//::SetWindowPos(((CDlgPropertiesChild*)pDlg)->m_hWnd,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
((CDlgPropertiesChild*)pDlg)->SetWindowPos(&wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
//((CDlgPropertiesChild*)pDlg)->SetForegroundWindow();
//((CDlgPropertiesChild*)pDlg)->BringWindowToTop();
//((CDlgPropertiesChild*)pDlg)->ShowWindow(TRUE);
}
*pResult = 0;
}