isdialogmessage

本文介绍了IsDialogMessage函数的功能及用法,此函数用于决定消息是否指定给对话框,并进行处理。文章详细解释了其参数、返回值及注意事项。
  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1193665761703&lmt=1193665780&format=336x280_as&output=html&correlator=1193665761687&url=http%3A%2F%2Fwww.codeguru.cn%2Fpublic%2Fiframe%2Fwinapiiframe.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=1285758818.1193665762&ga_sid=1193665762&ga_hid=111695597&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_his=8&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency">     函数功能:该函数决定一个消息是否指定给指定的对话框,如果是,则处理消息。     函数原型:BOOL IsDialogMessage(HWND hDlg,LPMSG IpMsg);     参数: hDlg:标识对话框。 IpMsg:指向一个含有将被检测的消息的MSG结构。返回值:如果消息被处理,则返回值为非零值;如果消息没有被处理,则返回值为零。备注:尽管IsDialogMessage函数是为无模态对话框而扩展的,但可以用含有控制的任何一个窗回来使用它。当 IsDialogMessage处理一个消息时,它检测键盘信息并把它们转变成对响应对话框的选择命令。例如当按下tab时选择下一个控制或控制组,当按下down时选择控制组的下一个控制。因为IsDialogMessage 函数要执行消息所有必要的转变和传送,IsDialogMessage函数处理的消息不必传送给TranslateMessage或 DispatchMessage函数处理。 IsDialogMessage函数把WM_GETDLGETDLGCODE发送到对话枢应用程序,决定应该处理哪个键。 lsDialogMessage函数把DMa_ETDEFID和DM_SETDEFID消息发送到窗口。这些消息在WINUSERH头文件中定义为WM_USER和WM_USER+1所以就有与应用程序定义的有一样值的消息发生冲突。速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h; 库文件:usgr32.lib:Unicode:在Windows NT上实现为Unicode和ANSI两种版本。
#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif namespace TreePropSheet { //------------------------------------------------------------------- // class CTreePropSheet //------------------------------------------------------------------- BEGIN_MESSAGE_MAP(CTreePropSheet, CPropertySheet) //{{AFX_MSG_MAP(CTreePropSheet) ON_WM_DESTROY() //}}AFX_MSG_MAP ON_MESSAGE(PSM_ADDPAGE, OnAddPage) ON_MESSAGE(PSM_REMOVEPAGE, OnRemovePage) ON_MESSAGE(PSM_SETCURSEL, OnSetCurSel) ON_MESSAGE(PSM_SETCURSELID, OnSetCurSelId) ON_MESSAGE(PSM_ISDIALOGMESSAGE, OnIsDialogMessage) ON_NOTIFY(TVN_SELCHANGINGA, s_unPageTreeId, OnPageTreeSelChanging) ON_NOTIFY(TVN_SELCHANGINGW, s_unPageTreeId, OnPageTreeSelChanging) ON_NOTIFY(TVN_SELCHANGEDA, s_unPageTreeId, OnPageTreeSelChanged) ON_NOTIFY(TVN_SELCHANGEDW, s_unPageTreeId, OnPageTreeSelChanged) ON_COMMAND(0x1, OnOk) ON_COMMAND(0x2, OnCancel) END_MESSAGE_MAP() IMPLEMENT_DYNAMIC(CTreePropSheet, CPropertySheet) const UINT CTreePropSheet::s_unPageTreeId = 0x7EEE; CTreePropSheet::CTreePropSheet() : CPropertySheet(), m_bPageTreeSelChangedActive(FALSE), m_bTreeViewMode(TRUE), m_bPageCaption(FALSE), m_bTreeImages(FALSE), m_nPageTreeWidth(200), m_pwndPageTree(NULL), m_pFrame(NULL) {} CTreePropSheet::CTreePropSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage) : CPropertySheet(nIDCaption, pParentWnd, iSelectPage), m_bPageTreeSelChangedActive(FALSE), m_bTreeViewMode(TRUE), m_bPageCaption(FALSE), m_bTreeImages(FALSE), m_nPageTreeWidth(200), m_pwndPageTree(NULL), m_pFrame(NULL) { } CTreePropSheet::CTreePropSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage) : CPropertySheet(pszCaption, pParentWnd, iSelectPage), m_bPageTreeSelChangedActive(FALSE), m_bTreeViewMode(TRUE), m_bPageCaption(FALSE), m_bTreeImages(FALSE), m_nPageTreeWidth(200), m_pwndPageTree(NULL), m_pFrame(NULL) { } CTreePropSheet::~CTreePropSheet() { } ///////////////////////////////////////////////////////////////////// // Operationen BOOL CTreePropSheet::SetTreeViewMode(BOOL bTreeViewMode /* = TRUE */, BOOL bPageCaption /* = FALSE */, BOOL bTreeImages /* = FALSE */) { if (IsWindow(m_hWnd)) { // needs to becalled, before the window has been created ASSERT(FALSE); return FALSE; } m_bTreeViewMode = bTreeViewMode; if (m_bTreeViewMode) { m_bPageCaption = bPageCaption; m_bTreeImages = bTreeImages; } return TRUE; } BOOL CTreePropSheet::SetTreeWidth(int nWidth) { if (IsWindow(m_hWnd)) { // needs to be called, before the window is created. ASSERT(FALSE); return FALSE; } m_nPageTreeWidth = nWidth; return TRUE; } void CTreePropSheet::SetEmptyPageText(LPCTSTR lpszEmptyPageText) { m_strEmptyPageMessage = lpszEmptyPageText; } DWORD CTreePropSheet::SetEmptyPageTextFormat(DWORD dwFormat) { DWORD dwPrevFormat = m_pFrame->GetMsgFormat(); m_pFrame->SetMsgFormat(dwFormat); return dwPrevFormat; } BOOL CTreePropSheet::SetTreeDefaultImages(CImageList *pImages) { if (pImages->GetImageCount() != 2) { ASSERT(FALSE); return FALSE; } if (m_DefaultImages.GetSafeHandle()) m_DefaultImages.DeleteImageList(); m_DefaultImages.Create(pImages); // update, if necessary if (IsWindow(m_hWnd)) RefillPageTree(); return TRUE; } BOOL CTreePropSheet::SetTreeDefaultImages(UINT unBitmapID, int cx, COLORREF crMask) { if (m_DefaultImages.GetSafeHandle()) m_DefaultImages.DeleteImageList(); if (!m_DefaultImages.Create(unBitmapID, cx, 0, crMask)) return FALSE; if (m_DefaultImages.GetImageCount() != 2) { m_DefaultImages.DeleteImageList(); return FALSE; } return TRUE; } CTreeCtrl* CTreePropSheet::GetPageTreeControl() { return m_pwndPageTree; } ///////////////////////////////////////////////////////////////////// // public helpers BOOL CTreePropSheet::SetPageIcon(CPropertyPage *pPage, HICON hIcon) { pPage->m_psp.dwFlags|= PSP_USEHICON; pPage->m_psp.hIcon = hIcon; return TRUE; } BOOL CTreePropSheet::SetPageIcon(CPropertyPage *pPage, UINT unIconId) { HICON hIcon = AfxGetApp()->LoadIcon(unIconId); if (!hIcon) return FALSE; return SetPageIcon(pPage, hIcon); } BOOL CTreePropSheet::SetPageIcon(CPropertyPage *pPage, CImageList &Images, int nImage) { HICON hIcon = Images.ExtractIcon(nImage); if (!hIcon) return FALSE; return SetPageIcon(pPage, hIcon); } BOOL CTreePropSheet::DestroyPageIcon(CPropertyPage *pPage) { if (!pPage || !(pPage->m_psp.dwFlags&PSP_USEHICON) || !pPage->m_psp.hIcon) return FALSE; DestroyIcon(pPage->m_psp.hIcon); pPage->m_psp.dwFlags&= ~PSP_USEHICON; pPage->m_psp.hIcon = NULL; return TRUE; } ///////////////////////////////////////////////////////////////////// // Overridable implementation helpers CString CTreePropSheet::GenerateEmptyPageMessage(LPCTSTR lpszEmptyPageMessage, LPCTSTR lpszCaption) { CString strMsg; strMsg.Format(lpszEmptyPageMessage, lpszCaption); return strMsg; } CTreeCtrl* CTreePropSheet::CreatePageTreeObject() { return new CTreeCtrl; } CPropPageFrame* CTreePropSheet::CreatePageFrame() { return new CPropPageFrameDefault; } ///////////////////////////////////////////////////////////////////// // Implementation helpers void CTreePropSheet::MoveChildWindows(int nDx, int nDy) { CWnd *pWnd = GetWindow(GW_CHILD); while (pWnd) { CRect rect; pWnd->GetWindowRect(rect); rect.OffsetRect(nDx, nDy); rect.bottom -= 50; ScreenToClient(rect); pWnd->MoveWindow(rect); pWnd->InvalidateRect(rect); pWnd = pWnd->GetNextWindow(); } } void CTreePropSheet::RefillPageTree() { if (!IsWindow(m_hWnd)) return; m_pwndPageTree->DeleteAllItems(); CTabCtrl *pTabCtrl = GetTabControl(); if (!IsWindow(pTabCtrl->GetSafeHwnd())) { ASSERT(FALSE); return; } const int nPageCount = pTabCtrl->GetItemCount(); // rebuild image list if (m_bTreeImages) { for (int i = m_Images.GetImageCount()-1; i >= 0; --i) m_Images.Remove(i); // add page images CImageList *pPageImages = pTabCtrl->GetImageList(); if (pPageImages) { for (int nImage = 0; nImage < pPageImages->GetImageCount(); ++nImage) { HICON hIcon = pPageImages->ExtractIcon(nImage); m_Images.Add(hIcon); DestroyIcon(hIcon); } } // add default images if (m_DefaultImages.GetSafeHandle()) { HICON hIcon; // add default images hIcon = m_DefaultImages.ExtractIcon(0); if (hIcon) { m_Images.Add(hIcon); DestroyIcon(hIcon); } hIcon = m_DefaultImages.ExtractIcon(1); { m_Images.Add(hIcon); DestroyIcon(hIcon); } } } // insert tree items for (int nPage = 0; nPage < nPageCount; ++nPage) { // Get title and image of the page CString strPagePath; TCITEM ti; ZeroMemory(&ti, sizeof(ti)); ti.mask = TCIF_TEXT|TCIF_IMAGE; ti.cchTextMax = MAX_PATH; ti.pszText = strPagePath.GetBuffer(ti.cchTextMax); ASSERT(ti.pszText); if (!ti.pszText) return; pTabCtrl->GetItem(nPage, &ti); strPagePath.ReleaseBuffer(); // Create an item in the tree for the page HTREEITEM hItem = CreatePageTreeItem(ti.pszText); ASSERT(hItem); if (hItem) { m_pwndPageTree->SetItemData(hItem, nPage); // set image if (m_bTreeImages) { int nImage = ti.iImage; if (nImage < 0 || nImage >= m_Images.GetImageCount()) nImage = m_DefaultImages.GetSafeHandle()? m_Images.GetImageCount()-1 : -1; m_pwndPageTree->SetItemImage(hItem, nImage, nImage); } } } } HTREEITEM CTreePropSheet::CreatePageTreeItem(LPCTSTR lpszPath, HTREEITEM hParent /* = TVI_ROOT */) { CString strPath(lpszPath); CString strTopMostItem(SplitPageTreePath(strPath)); // Check if an item with the given text does already exist HTREEITEM hItem = NULL; HTREEITEM hChild = m_pwndPageTree->GetChildItem(hParent); while (hChild) { if (m_pwndPageTree->GetItemText(hChild) == strTopMostItem) { hItem = hChild; break; } hChild = m_pwndPageTree->GetNextItem(hChild, TVGN_NEXT); } // If item with that text does not already exist, create a new one if (!hItem) { hItem = m_pwndPageTree->InsertItem(strTopMostItem, hParent); m_pwndPageTree->SetItemData(hItem, -1); if (!strPath.IsEmpty() && m_bTreeImages && m_DefaultImages.GetSafeHandle()) // set folder image m_pwndPageTree->SetItemImage(hItem, m_Images.GetImageCount()-2, m_Images.GetImageCount()-2); } if (!hItem) { ASSERT(FALSE); return NULL; } if (strPath.IsEmpty()) return hItem; else return CreatePageTreeItem(strPath, hItem); } CString CTreePropSheet::SplitPageTreePath(CString &strRest) { int nSeperatorPos = 0; while (TRUE) { nSeperatorPos = strRest.Find(_T("::"), nSeperatorPos); if (nSeperatorPos == -1) { CString strItem(strRest); strRest.Empty(); return strItem; } else if (nSeperatorPos>0) { // if there is an odd number of backslashes infront of the // seperator, than do not interpret it as separator int nBackslashCount = 0; for (int nPos = nSeperatorPos-1; nPos >= 0 && strRest[nPos]==_T('\\'); --nPos, ++nBackslashCount); if (nBackslashCount%2 == 0) break; else ++nSeperatorPos; } } CString strItem(strRest.Left(nSeperatorPos)); strItem.Replace(_T("\\::"), _T("::")); strItem.Replace(_T("\\\\"), _T("\\")); strRest = strRest.Mid(nSeperatorPos+2); return strItem; } BOOL CTreePropSheet::KillActiveCurrentPage() { HWND hCurrentPage = PropSheet_GetCurrentPageHwnd(m_hWnd); if (!IsWindow(hCurrentPage)) { ASSERT(FALSE); return TRUE; } // Check if the current page is really active (if page is invisible // an virtual empty page is the active one. if (!::IsWindowVisible(hCurrentPage)) return TRUE; // Try to deactivate current page PSHNOTIFY pshn; pshn.hdr.code = PSN_KILLACTIVE; pshn.hdr.hwndFrom = m_hWnd; pshn.hdr.idFrom = GetDlgCtrlID(); pshn.lParam = 0; if (::SendMessage(hCurrentPage, WM_NOTIFY, pshn.hdr.idFrom, (LPARAM)&pshn)) // current page does not allow page change return FALSE; // Hide the page ::ShowWindow(hCurrentPage, SW_HIDE); return TRUE; } HTREEITEM CTreePropSheet::GetPageTreeItem(int nPage, HTREEITEM hRoot /* = TVI_ROOT */) { // Special handling for root case if (hRoot == TVI_ROOT) hRoot = m_pwndPageTree->GetNextItem(NULL, TVGN_ROOT); // Check parameters if (nPage < 0 || nPage >= GetPageCount()) { ASSERT(FALSE); return NULL; } if (hRoot == NULL) { ASSERT(FALSE); return NULL; } // we are performing a simple linear search here, because we are // expecting only little data HTREEITEM hItem = hRoot; while (hItem) { if ((signed)m_pwndPageTree->GetItemData(hItem) == nPage) return hItem; if (m_pwndPageTree->ItemHasChildren(hItem)) { HTREEITEM hResult = GetPageTreeItem(nPage, m_pwndPageTree->GetNextItem(hItem, TVGN_CHILD)); if (hResult) return hResult; } hItem = m_pwndPageTree->GetNextItem(hItem, TVGN_NEXT); } // we've found nothing, if we arrive here return hItem; } BOOL CTreePropSheet::SelectPageTreeItem(int nPage) { HTREEITEM hItem = GetPageTreeItem(nPage); if (!hItem) return FALSE; return m_pwndPageTree->SelectItem(hItem); } BOOL CTreePropSheet::SelectCurrentPageTreeItem() { CTabCtrl *pTab = GetTabControl(); if (!IsWindow(pTab->GetSafeHwnd())) return FALSE; return SelectPageTreeItem(pTab->GetCurSel()); } void CTreePropSheet::UpdateCaption() { HWND hPage = PropSheet_GetCurrentPageHwnd(GetSafeHwnd()); BOOL bRealPage = IsWindow(hPage) && ::IsWindowVisible(hPage); HTREEITEM hItem = m_pwndPageTree->GetSelectedItem(); if (!hItem) return; CString strCaption = m_pwndPageTree->GetItemText(hItem); // if empty page, then update empty page message if (!bRealPage) m_pFrame->SetMsgText(GenerateEmptyPageMessage(m_strEmptyPageMessage, strCaption)); // if no captions are displayed, cancel here if (!m_pFrame->GetShowCaption()) return; // get tab control, to the the images from CTabCtrl *pTabCtrl = GetTabControl(); if (!IsWindow(pTabCtrl->GetSafeHwnd())) { ASSERT(FALSE); return; } if (m_bTreeImages) { // get image from tree int nImage; m_pwndPageTree->GetItemImage(hItem, nImage, nImage); HICON hIcon = m_Images.ExtractIcon(nImage); m_pFrame->SetCaption(strCaption, hIcon); if (hIcon) DestroyIcon(hIcon); } else if (bRealPage) { // get image from hidden (original) tab provided by the original // implementation CImageList *pImages = pTabCtrl->GetImageList(); if (pImages) { TCITEM ti; ZeroMemory(&ti, sizeof(ti)); ti.mask = TCIF_IMAGE; HICON hIcon = NULL; if (pTabCtrl->GetItem((int)m_pwndPageTree->GetItemData(hItem), &ti)) hIcon = pImages->ExtractIcon(ti.iImage); m_pFrame->SetCaption(strCaption, hIcon); if (hIcon) DestroyIcon(hIcon); } else m_pFrame->SetCaption(strCaption); } else m_pFrame->SetCaption(strCaption); } void CTreePropSheet::ActivatePreviousPage() { if (!IsWindow(m_hWnd)) return; if (!IsWindow(m_pwndPageTree->GetSafeHwnd())) { // normal tab property sheet. Simply use page index int nPageIndex = GetActiveIndex(); if (nPageIndex<0 || nPageIndex>=GetPageCount()) return; int nPrevIndex = (nPageIndex==0)? GetPageCount()-1 : nPageIndex-1; SetActivePage(nPrevIndex); } else { // property sheet with page tree. // we need a more sophisticated handling here, than simply using // the page index, because we won't skip empty pages. // so we have to walk the page tree HTREEITEM hItem = m_pwndPageTree->GetSelectedItem(); ASSERT(hItem); if (!hItem) return; HTREEITEM hPrevItem = NULL; if (hPrevItem=m_pwndPageTree->GetPrevSiblingItem(hItem)) { while (m_pwndPageTree->ItemHasChildren(hPrevItem)) { hPrevItem = m_pwndPageTree->GetChildItem(hPrevItem); while (m_pwndPageTree->GetNextSiblingItem(hPrevItem)) hPrevItem = m_pwndPageTree->GetNextSiblingItem(hPrevItem); } } else hPrevItem=m_pwndPageTree->GetParentItem(hItem); if (!hPrevItem) { // no prev item, so cycle to the last item hPrevItem = m_pwndPageTree->GetRootItem(); while (TRUE) { while (m_pwndPageTree->GetNextSiblingItem(hPrevItem)) hPrevItem = m_pwndPageTree->GetNextSiblingItem(hPrevItem); if (m_pwndPageTree->ItemHasChildren(hPrevItem)) hPrevItem = m_pwndPageTree->GetChildItem(hPrevItem); else break; } } if (hPrevItem) m_pwndPageTree->SelectItem(hPrevItem); } } void CTreePropSheet::ActivateNextPage() { if (!IsWindow(m_hWnd)) return; if (!IsWindow(m_pwndPageTree->GetSafeHwnd())) { // normal tab property sheet. Simply use page index int nPageIndex = GetActiveIndex(); if (nPageIndex<0 || nPageIndex>=GetPageCount()) return; int nNextIndex = (nPageIndex==GetPageCount()-1)? 0 : nPageIndex+1; SetActivePage(nNextIndex); } else { // property sheet with page tree. // we need a more sophisticated handling here, than simply using // the page index, because we won't skip empty pages. // so we have to walk the page tree HTREEITEM hItem = m_pwndPageTree->GetSelectedItem(); ASSERT(hItem); if (!hItem) return; HTREEITEM hNextItem = NULL; if (hNextItem=m_pwndPageTree->GetChildItem(hItem)) ; else if (hNextItem=m_pwndPageTree->GetNextSiblingItem(hItem)) ; else if (m_pwndPageTree->GetParentItem(hItem)) { while (!hNextItem) { hItem = m_pwndPageTree->GetParentItem(hItem); if (!hItem) break; hNextItem = m_pwndPageTree->GetNextSiblingItem(hItem); } } if (!hNextItem) // no next item -- so cycle to the first item hNextItem = m_pwndPageTree->GetRootItem(); if (hNextItem) m_pwndPageTree->SelectItem(hNextItem); } } ///////////////////////////////////////////////////////////////////// // Overridings BOOL CTreePropSheet::OnInitDialog() { if (m_bTreeViewMode) { // be sure, there are no stacked tabs, because otherwise the // page caption will be to large in tree view mode EnableStackedTabs(FALSE); // Initialize image list. if (m_DefaultImages.GetSafeHandle()) { IMAGEINFO ii; m_DefaultImages.GetImageInfo(0, &ii); if (ii.hbmImage) DeleteObject(ii.hbmImage); if (ii.hbmMask) DeleteObject(ii.hbmMask); m_Images.Create(ii.rcImage.right-ii.rcImage.left, ii.rcImage.bottom-ii.rcImage.top, ILC_COLOR32|ILC_MASK, 0, 1); } else m_Images.Create(16, 16, ILC_COLOR32|ILC_MASK, 0, 1); } // perform default implementation BOOL bResult = CPropertySheet::OnInitDialog(); if (!m_bTreeViewMode) // stop here, if we would like to use tabs return bResult; // Get tab control... CTabCtrl *pTab = GetTabControl(); if (!IsWindow(pTab->GetSafeHwnd())) { ASSERT(FALSE); return bResult; } // ... and hide it pTab->ShowWindow(SW_HIDE); pTab->EnableWindow(FALSE); // Place another (empty) tab ctrl, to get a frame instead CRect rectFrame; pTab->GetWindowRect(rectFrame); ScreenToClient(rectFrame); rectFrame.bottom -= 50; m_pFrame = CreatePageFrame(); if (!m_pFrame) { ASSERT(FALSE); AfxThrowMemoryException(); } m_pFrame->Create(WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS, rectFrame, this, 0xFFFF); m_pFrame->ShowCaption(m_bPageCaption); // Lets make place for the tree ctrl const int nTreeWidth = m_nPageTreeWidth; const int nTreeSpace = 5; CRect rectSheet; GetWindowRect(rectSheet); rectSheet.right+= nTreeWidth; SetWindowPos(NULL, -1, -1, rectSheet.Width(), rectSheet.Height()-50, SWP_NOZORDER|SWP_NOMOVE|SWP_NOACTIVATE); CenterWindow(); MoveChildWindows(nTreeWidth, 0); // Lets calculate the rectangle for the tree ctrl CRect rectTree(rectFrame); rectTree.right = rectTree.left + nTreeWidth - nTreeSpace; // calculate caption height CTabCtrl wndTabCtrl; wndTabCtrl.Create(WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS, rectFrame, this, 0x1234); wndTabCtrl.InsertItem(0, _T("")); CRect rectFrameCaption; wndTabCtrl.GetItemRect(0, rectFrameCaption); wndTabCtrl.DestroyWindow(); m_pFrame->SetCaptionHeight(rectFrameCaption.Height()); // if no caption should be displayed, make the window smaller in // height if (!m_bPageCaption) { // make frame smaller m_pFrame->GetWnd()->GetWindowRect(rectFrame); ScreenToClient(rectFrame); rectFrame.top+= rectFrameCaption.Height(); m_pFrame->GetWnd()->MoveWindow(rectFrame); // move all child windows up MoveChildWindows(0, -rectFrameCaption.Height()); // modify rectangle for the tree ctrl rectTree.bottom-= rectFrameCaption.Height(); // make us smaller CRect rect; GetWindowRect(rect); rect.top+= rectFrameCaption.Height()/2; rect.bottom-= rectFrameCaption.Height()-rectFrameCaption.Height()/2; if (GetParent()) GetParent()->ScreenToClient(rect); MoveWindow(rect); } // finally create tht tree control const DWORD dwTreeStyle = TVS_SHOWSELALWAYS|TVS_TRACKSELECT|TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS; m_pwndPageTree = CreatePageTreeObject(); if (!m_pwndPageTree) { ASSERT(FALSE); AfxThrowMemoryException(); } // MFC7-support here (Thanks to Rainer Wollgarten) #if _MFC_VER >= 0x0700 { m_pwndPageTree->CreateEx( WS_EX_CLIENTEDGE|WS_EX_NOPARENTNOTIFY, WS_TABSTOP|WS_CHILD|WS_VISIBLE|dwTreeStyle, rectTree, this, s_unPageTreeId); } #else { m_pwndPageTree->CreateEx( WS_EX_CLIENTEDGE|WS_EX_NOPARENTNOTIFY, _T("SysTreeView32"), _T("PageTree"), WS_TABSTOP|WS_CHILD|WS_VISIBLE|dwTreeStyle, rectTree, this, s_unPageTreeId); } #endif if (m_bTreeImages) { m_pwndPageTree->SetImageList(&m_Images, TVSIL_NORMAL); m_pwndPageTree->SetImageList(&m_Images, TVSIL_STATE); } // Fill the tree ctrl RefillPageTree(); // Select item for the current page if (pTab->GetCurSel() > -1) SelectPageTreeItem(pTab->GetCurSel()); HTREEITEM hItem = m_pwndPageTree->GetChildItem(NULL); while ( hItem ) { m_pwndPageTree->Expand(hItem, TVE_EXPAND); hItem = m_pwndPageTree->GetNextSiblingItem( hItem ); } CRect rectok, rectcancel, rectDlg; GetDlgItem(IDOK)->GetWindowRect(&rectok); GetDlgItem(IDCANCEL)->GetWindowRect(&rectcancel); GetWindowRect(&rectDlg); rectok.top = rectDlg.bottom - 35; rectok.bottom = rectok.top + 25; rectcancel.top = rectDlg.bottom - 35; rectcancel.bottom = rectcancel.top + 25; ScreenToClient(&rectok); ScreenToClient(&rectcancel); GetDlgItem(IDOK)->MoveWindow(&rectok); GetDlgItem(IDCANCEL)->MoveWindow(&rectcancel); return bResult; } void CTreePropSheet::OnDestroy() { CPropertySheet::OnDestroy(); if (m_Images.GetSafeHandle()) m_Images.DeleteImageList(); delete m_pwndPageTree; m_pwndPageTree = NULL; delete m_pFrame; m_pFrame = NULL; } LRESULT CTreePropSheet::OnAddPage(WPARAM wParam, LPARAM lParam) { LRESULT lResult = DefWindowProc(PSM_ADDPAGE, wParam, lParam); if (!m_bTreeViewMode) return lResult; RefillPageTree(); SelectCurrentPageTreeItem(); return lResult; } LRESULT CTreePropSheet::OnRemovePage(WPARAM wParam, LPARAM lParam) { LRESULT lResult = DefWindowProc(PSM_REMOVEPAGE, wParam, lParam); if (!m_bTreeViewMode) return lResult; RefillPageTree(); SelectCurrentPageTreeItem(); return lResult; } LRESULT CTreePropSheet::OnSetCurSel(WPARAM wParam, LPARAM lParam) { LRESULT lResult = DefWindowProc(PSM_SETCURSEL, wParam, lParam); if (!m_bTreeViewMode) return lResult; SelectCurrentPageTreeItem(); UpdateCaption(); return lResult; } LRESULT CTreePropSheet::OnSetCurSelId(WPARAM wParam, LPARAM lParam) { LRESULT lResult = DefWindowProc(PSM_SETCURSEL, wParam, lParam); if (!m_bTreeViewMode) return lResult; SelectCurrentPageTreeItem(); UpdateCaption(); return lResult; } void CTreePropSheet::OnPageTreeSelChanging(NMHDR *pNotifyStruct, LRESULT *plResult) { *plResult = 0; if (m_bPageTreeSelChangedActive) return; else m_bPageTreeSelChangedActive = TRUE; NMTREEVIEW *pTvn = reinterpret_cast<NMTREEVIEW*>(pNotifyStruct); int nPage = m_pwndPageTree->GetItemData(pTvn->itemNew.hItem); BOOL bResult; if (nPage<0 || (unsigned)nPage>=m_pwndPageTree->GetCount()) bResult = KillActiveCurrentPage(); else bResult = SetActivePage(nPage); if (!bResult) // prevent selection to change *plResult = TRUE; // Set focus to tree ctrl (I guess that's what the user expects) m_pwndPageTree->SetFocus(); m_bPageTreeSelChangedActive = FALSE; return; } void CTreePropSheet::OnPageTreeSelChanged(NMHDR *pNotifyStruct, LRESULT *plResult) { *plResult = 0; UpdateCaption(); return; } LRESULT CTreePropSheet::OnIsDialogMessage(WPARAM wParam, LPARAM lParam) { MSG *pMsg = reinterpret_cast<MSG*>(lParam); if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_TAB && GetKeyState(VK_CONTROL)&0x8000) { if (GetKeyState(VK_SHIFT)&0x8000) ActivatePreviousPage(); else ActivateNextPage(); return TRUE; } return CPropertySheet::DefWindowProc(PSM_ISDIALOGMESSAGE, wParam, lParam); } void CTreePropSheet::OnOk() { //首先给各子窗口发送 IDOK 消息 for (long l = 0; l < m_pages.GetSize(); l++) { CPropertyPage *pPage = (CPropertyPage*)m_pages[l]; if( pPage != NULL && !::IsBadWritePtr(pPage, sizeof(CPropertyPage)) && pPage->GetSafeHwnd() ) { pPage->UpdateData(TRUE); pPage->OnOK(); } } ::DestroyWindow( m_hWnd ); } void CTreePropSheet::OnCancel() { //首先给各子窗口发送 CANCEL 消息 for (long l = 0; l < m_pages.GetSize(); l++) { CPropertyPage *pPage = (CPropertyPage*)m_pages[l]; if( pPage != NULL && !::IsBadWritePtr(pPage, sizeof(CPropertyPage)) && pPage->GetSafeHwnd() ) { pPage->OnCancel(); } } ::DestroyWindow( m_hWnd ); //EndDialog( IDCANCEL ); } void InitCassParam(CPara1Dlg &m_page1, CPara2Dlg &m_page2, CPara3Dlg &m_page3) { int nElecline=1,nWall=0,nWallSimbol=0,nXiepo=0,nComputeArea=3; double dHatchSpace=20.0,dDtm=10.0; TCHAR szMapInfo[255]=_T("\\CASS9.0\\system\\MapInfo.db"); TCHAR TkChdw[100]=_T("单位名称"),TkCtrq[100]=_T("2002年3月数字化制图."); TCHAR TkZbx[100]=_T("任意直角坐标系: 坐标起点以 地方 为原点起算."); TCHAR TkGcjz[100]=_T("1985国家高程基准,等高距为1米."),TkTushi[100]=_T("2006年版图式."); TCHAR TkSurvey[100]=_T(""),TkDraw[100]=_T(""),TkCheck[100]=_T(""),TkSecret[255]=_T(""); BOOL bCenterLine = FALSE, bHasCenterLine = FALSE, bMakeRegion = FALSE; HKEY rKey; int nTemp; int nHighBits = 2, g_nInmapType = 0, g_nOutmapType = 0, g_nBmsbClose = 1, g_nContinuous = 0, g_nXiepoline = 0, g_bRegenKzdzj, g_bRegenGcdzj,g_bRegenJzwzj; double g_dZdhHeight = 1, g_dJzwHeight = 1, g_dLsxStep = 1; int nInstru = 24000; //全站仪型号 int nParity = 1; //校验 int nByteSize = 1;//数据位 int nTimeOut = 1;//延时 int nPort = 1;//通讯口 int nStopBits = 1;//停止位 int nBaudRate = 1;//波特率 int nZhandian = 1;//展点类型 if (RegOpenKeyEx(HKEY_CURRENT_USER, CASS_REGSTER, 0, KEY_READ, &rKey)==ERROR_SUCCESS) { //地物绘制 CassQueryReg(rKey,_T("highbits"),g_nHighBits); //高程注记小数点位数 CassQueryReg(rKey,_T("elecline"),nElecline); //电力线电杆间是否连线 CassQueryReg(rKey,_T("wall"),nWall); //围墙端是否封口 CassQueryReg(rKey,_T("wallsimbol"),nWallSimbol); //围墙两线间符号 0--图块 1--短线 CassQueryReg(rKey,_T("xiepo"),nXiepo); //自然斜坡短线的长度 0--短 1--长 CassQueryReg(rKey,_T("hatchspace"),dHatchSpace); //填充间距 CassQueryReg(rKey,_T("kanhigh"),g_dKanHigh); //陡坎默认坎高 CassQueryReg(rKey,_T("dtm"),dDtm); //DTM三角形最小角 CassQueryReg(rKey,_T("inmaptype"),g_nInmapType); //生成交换文件选项 0--骨架线 1--图形元素 CassQueryReg(rKey,_T("outmaptype"),g_nOutmapType); //读入交换文件选项 0--骨架线 1--图形元素 CassQueryReg(rKey,_T("bmsbclose"),g_nBmsbClose); CassQueryReg(rKey,_T("continuous"),g_nContinuous); CassQueryReg(rKey,_T("xiepodi"),g_nXiepoline); CassQueryReg(rKey,_T("zdtype"),g_nZdType); CassQueryReg(rKey,_T("mapdbf"),szMapInfo); //图幅数据库名 CassQueryReg(rKey,_T("userpath"),g_szUsePath); //用户工作目录名 CassQueryReg(rKey,_T("gcdheight"),g_dGcdHeight); //高程点字高 CassQueryReg(rKey,_T("gcdwordstyle"),g_szWordStyle); //高程点注记字体 CassQueryReg(rKey,_T("zdhheight"),g_dZdhHeight); //展点号字高 CassQueryReg(rKey,_T("jzwheight"),g_dJzwHeight); //建筑物字高 CassQueryReg(rKey,_T("lsxstep"),g_dLsxStep); //流水线步长 CassQueryReg(rKey,_T("textfactor"),g_dTextFactor); //文字宽高比 CassQueryReg(rKey,_T("transect"),g_nTufaDeci); //土方计算小数位数 CassQueryReg(rKey,_T("computearea"),nComputeArea); //面积计算小数位数 CassQueryReg(rKey, _T("road_centerlinemake"), bCenterLine); //道路、桥梁、河流是否按中心线生成 CassQueryReg(rKey, _T("road_hascenterline"), bHasCenterLine); //道路、桥梁、河流生成中心线 CassQueryReg(rKey, _T("road_makeregion"), bMakeRegion); //道路、桥梁、河流生成面 CassQueryReg(rKey, _T("tufangdoukan"), g_bIfDouKan); CassQueryReg(rKey, _T("fgwhighbits"), g_nFgwHighDeci); //方格网土方格网高程注记位数 CassQueryReg(rKey,_T("hdmhighbits"),g_nHdmHighDeci); //横断面线高程注记位数 CassQueryReg(rKey,_T("hdmdistbits"),g_nHdmDistDeci); //横断面线距离注记位数 nTemp=1; CassQueryReg(rKey,_T("regenkzdzj"),nTemp); if ( 0 == nTemp ) g_bRegenKzdzj = FALSE; else g_bRegenKzdzj = TRUE; nTemp=1; CassQueryReg(rKey,_T("regengcdzj"),nTemp); if ( 0 == nTemp ) g_bRegenGcdzj = FALSE; else g_bRegenGcdzj = TRUE; nTemp=1; CassQueryReg(rKey,_T("regenjzwzj"),nTemp); if ( 0 == nTemp ) g_bRegenJzwzj = FALSE; else g_bRegenJzwzj = TRUE; CassQueryReg(rKey,_T("sc_enable"), m_page3.m_nEnableShortCuts); //是否启用快捷键 //电子平板 CassQueryReg(rKey,_T("totalstation"), nInstru); //全站仪型号 CassQueryReg(rKey,_T("parity"), nParity); //校验 CassQueryReg(rKey,_T("ByteSize"), nByteSize); //数据位 CassQueryReg(rKey,_T("timeout"), nTimeOut); //延时 CassQueryReg(rKey,_T("port"), nPort); //通讯口 CassQueryReg(rKey,_T("stopbits"), nStopBits); //停止位 CassQueryReg(rKey,_T("baudrate"),nTemp); nBaudRate = nTemp;//波特率 nZhandian=0; CassQueryReg(rKey,_T("dzpbzd"), nZhandian); //展点类型 ////图框参数 //CassQueryReg(rKey,_T("tk_chdw"),TkChdw); //CassQueryReg(rKey,_T("tk_ctrq"),TkCtrq); //CassQueryReg(rKey,_T("tk_zbx"),TkZbx); //CassQueryReg(rKey,_T("tk_gcjz"),TkGcjz); //CassQueryReg(rKey,_T("tk_tushi"),TkTushi); //CassQueryReg(rKey,_T("tk_survey"),TkSurvey); //CassQueryReg(rKey,_T("tk_draw"),TkDraw); //CassQueryReg(rKey,_T("tk_check"),TkCheck); //CassQueryReg(rKey,_T("tk_secret"),TkSecret); RegCloseKey(rKey); } //读出对话框 CAcModuleResourceOverride myResources; HWND hWndACAD = adsw_acadMainWnd(); m_page1.m_nGao = g_nHighBits-1; if (1 == nElecline) m_page1.m_nDian=0; else m_page1.m_nDian=1; m_page1.m_nWall = nWall; m_page1.m_nWallSimbol = nWallSimbol; m_page1.m_nXie = nXiepo; m_page1.m_dTian = dHatchSpace; m_page1.m_dKan = g_dKanHigh; m_page1.m_dGcd = g_dGcdHeight; m_page1.m_strWrdSty.Format(_T("%s"),g_szWordStyle); m_page1.m_dZdh = g_dZdhHeight; m_page1.m_dJzwHeight = g_dJzwHeight; m_page1.m_dLsxStep = g_dLsxStep; m_page1.m_nContinuous = g_nContinuous; m_page1.m_nXiepoline = g_nXiepoline; m_page1.m_bCenterLine = bCenterLine; m_page1.m_bHasCenterLine = bHasCenterLine; m_page1.m_bMakeRegion = bMakeRegion; m_page1.m_nZdType = g_nZdType; m_page1.m_dTextWidth = g_dTextFactor; m_page3.m_dDtm = dDtm; m_page3.m_nInmap = g_nInmapType; m_page3.m_nOutmap = g_nOutmapType; m_page3.m_nClose = g_nBmsbClose; m_page3.m_strUserdPath.Format(_T("%s"),g_szUsePath); m_page3.m_strMapinfo.Format(_T("%s"),szMapInfo); m_page3.m_nTransect = g_nTufaDeci; m_page3.m_nComputeArea = nComputeArea; m_page3.m_bKzdzj = g_bRegenKzdzj; m_page3.m_bGczj = g_bRegenGcdzj; m_page3.m_bJzwzj = g_bRegenJzwzj; m_page3.m_bIfDoukan = g_bIfDouKan; m_page3.m_nFGWGao = g_nFgwHighDeci; m_page3.m_nHgmDist = g_nHdmDistDeci; m_page3.m_nHgmGc = g_nHdmHighDeci; //电子平板 m_page2.m_nStation = nInstru; //全站仪型号 m_page2.m_nOvertime = nTimeOut; //延时 m_page2.m_nPort = nPort; //通讯口 m_page2.m_nCheck = nParity; //校验 m_page2.m_strBTL.Format(_T("%d"), nBaudRate); // if ( 2400 == nBaudRate ) m_page2.m_nBaud = 1; //波特率 // else if ( 4800 == nBaudRate )m_page2.m_nBaud = 2; // else if ( 9600 == nBaudRate ) m_page2.m_nBaud = 3; // else if (115200 == nBaudRate) m_page2.m_nBaud = 4; // else m_page2.m_nBaud = 0; if ( 7 == nByteSize ) m_page2.m_nData = 1; //数据位 else m_page2.m_nData = 0; if ( 2 == nStopBits ) m_page2.m_nStop = 1; //停止位 else m_page2.m_nStop = 0; m_page2.m_nZhandian = nZhandian; } void SetCassParam(CPara1Dlg &m_page1, CPara2Dlg &m_page2, CPara3Dlg &m_page3) { int nElecline=1,nWall=0,nWallSimbol=0,nXiepo=0,nTransect=1,nComputeArea=3; double dHatchSpace=20.0,dDtm=10.0; TCHAR szMapInfo[255]=_T("\\CASS9.0\\system\\MapInfo.db"); TCHAR TkChdw[100]=_T("单位名称"),TkCtrq[100]=_T("2002年3月数字化制图."); TCHAR TkZbx[100]=_T("任意直角坐标系: 坐标起点以 地方 为原点起算."); TCHAR TkGcjz[100]=_T("1985国家高程基准,等高距为1米."),TkTushi[100]=_T("2006年版图式."); TCHAR TkSurvey[100]=_T(""),TkDraw[100]=_T(""),TkCheck[100]=_T(""),TkSecret[255]=_T(""); BOOL bCenterLine = m_page1.m_bCenterLine, bHasCenterLine = m_page1.m_bHasCenterLine, bMakeRegion = m_page1.m_bMakeRegion; HKEY rKey; int nTemp; if ( false == seekdog() ) return; int nHighBits = 2, g_nInmapType = 0, g_nOutmapType = 0, g_nBmsbClose = 1, g_nContinuous = 0, g_nXiepoline = 0, g_bRegenKzdzj, g_bRegenGcdzj,g_bRegenJzwzj; double g_dZdhHeight = 1, g_dJzwHeight = 1, g_dLsxStep = 1; int nInstru = 24000; //全站仪型号 int nParity = 1; //校验 int nByteSize = 1;//数据位 int nTimeOut = 1;//延时 int nPort = 1;//通讯口 int nStopBits = 1;//停止位 int nBaudRate = 1;//波特率 int nZhandian = 1;//展点类型 //写入对话框 g_nHighBits = m_page1.m_nGao+1; if (0 == m_page1.m_nDian) nElecline=1; else nElecline=0; nWall = m_page1.m_nWall; nWallSimbol = m_page1.m_nWallSimbol; nXiepo = m_page1.m_nXie; dHatchSpace = m_page1.m_dTian; g_dKanHigh = m_page1.m_dKan; dDtm = m_page3.m_dDtm; g_dGcdHeight = m_page1.m_dGcd; _tcscpy(g_szWordStyle, m_page1.m_strWrdSty); g_dZdhHeight = m_page1.m_dZdh; g_dJzwHeight = m_page1.m_dJzwHeight; g_dLsxStep = m_page1.m_dLsxStep; g_nContinuous = m_page1.m_nContinuous; g_nXiepoline = m_page1.m_nXiepoline; g_nZdType = m_page1.m_nZdType; g_nInmapType = m_page3.m_nInmap; g_nOutmapType = m_page3.m_nOutmap; g_nBmsbClose = m_page3.m_nClose; _tcscpy(g_szUsePath, m_page3.m_strUserdPath); if ( '\\' != g_szUsePath[_tcslen(g_szUsePath)-1] ) _tcscat(g_szUsePath,_T("\\")); //2003.08.02 _tcscpy(szMapInfo, m_page3.m_strMapinfo); g_dTextFactor = m_page1.m_dTextWidth; g_nTufaDeci = m_page3.m_nTransect; nComputeArea = m_page3.m_nComputeArea; g_bRegenKzdzj = m_page3.m_bKzdzj; g_bRegenGcdzj = m_page3.m_bGczj; g_bRegenJzwzj = m_page3.m_bJzwzj; //电子平板 nInstru = m_page2.m_nStation; //全站仪型号 nTimeOut = m_page2.m_nOvertime; //延时 nPort = m_page2.m_nPort; //通讯口 nParity = m_page2.m_nCheck; //校验 nBaudRate = _ttoi(m_page2.m_strBTL); // if ( 1 == m_page2.m_nBaud ) nBaudRate = 2400; //波特率 // else if ( 2 == m_page2.m_nBaud ) nBaudRate = 4800; // else if ( 3 == m_page2.m_nBaud ) nBaudRate = 9600; // else if (4 == m_page2.m_nBaud) nBaudRate = 115200; // else nBaudRate = 1200; if ( 1 == m_page2.m_nData ) nByteSize = 7; //数据位 else nByteSize = 8; if ( 1 == m_page2.m_nStop ) nStopBits = 2; //停止位 else nStopBits = 0; nZhandian = m_page2.m_nZhandian; //展点 //写入注册表 DWORD result; if ( RegCreateKeyEx(HKEY_CURRENT_USER, CASS_REGSTER, 0, _T(""), REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &rKey, &result) != ERROR_SUCCESS) return; CassSetReg(rKey,_T("highbits"),g_nHighBits); //高程注记小数点位数 CassSetReg(rKey,_T("elecline"),nElecline); //电力线电杆间是否连线 CassSetReg(rKey,_T("wall"),nWall); //围墙端是否封口 CassSetReg(rKey,_T("wallsimbol"),nWallSimbol); //围墙端是否封口 CassSetReg(rKey,_T("xiepo"),nXiepo); //自然斜坡短线的长度 0--短 1--长 CassSetReg(rKey,_T("hatchspace"),dHatchSpace); //填充间距 CassSetReg(rKey,_T("kanhigh"),g_dKanHigh); //陡坎默认坎高 CassSetReg(rKey,_T("dtm"),dDtm); //DTM三角形最小角 CassSetReg(rKey,_T("inmaptype"),g_nInmapType); //生成交换文件选项 0--骨架线 1--图形元素 CassSetReg(rKey,_T("outmaptype"),g_nOutmapType); //读入交换文件选项 0--骨架线 1--图形元素 CassSetReg(rKey,_T("bmsbclose"),g_nBmsbClose); CassSetReg(rKey,_T("continuous"),g_nContinuous); CassSetReg(rKey,_T("xiepodi"),g_nXiepoline); CassSetReg(rKey,_T("zdtype"),g_nZdType); //展点注记选项 CassSetReg(rKey,_T("mapdbf"),szMapInfo); //图幅数据库名 CassSetReg(rKey,_T("userpath"),g_szUsePath); //用户工作目录名 CassSetReg(rKey,_T("gcdheight"),g_dGcdHeight); //高程点字高 CassSetReg(rKey,_T("gcdwordstyle"),g_szWordStyle); //高程点字高 CassSetReg(rKey,_T("zdhheight"),g_dZdhHeight); //展点号字高 CassSetReg(rKey,_T("jzwheight"),g_dJzwHeight); //建筑物字高 CassSetReg(rKey,_T("lsxstep"),g_dLsxStep); //流水线步长 CassSetReg(rKey,_T("textfactor"),g_dTextFactor); //文字宽高比 CassSetReg(rKey,_T("computearea"),nComputeArea); //面积计算小数位数 g_nFgwHighDeci = m_page3.m_nFGWGao; g_nHdmDistDeci = m_page3.m_nHgmDist; g_nHdmHighDeci = m_page3.m_nHgmGc; g_bIfDouKan = m_page3.m_bIfDoukan; CassSetReg(rKey, _T("tufangdoukan"), g_bIfDouKan); CassSetReg(rKey,_T("transect"),g_nTufaDeci); //土方量位数 CassSetReg(rKey,_T("fgwhighbits"),g_nFgwHighDeci); //方格网土方格网高程注记位数 CassSetReg(rKey,_T("hdmhighbits"),g_nHdmHighDeci); //横断面线高程注记位数 CassSetReg(rKey,_T("hdmdistbits"),g_nHdmDistDeci); //横断面线距离注记位数 if ( FALSE == g_bRegenGcdzj ) nTemp = 0; else nTemp = 1; CassSetReg(rKey,_T("regengcdzj"),nTemp); //重构高程点 if ( FALSE == g_bRegenKzdzj ) nTemp = 0; else nTemp = 1; CassSetReg(rKey,_T("regenkzdzj"),nTemp); //重构控制点 if ( FALSE == g_bRegenJzwzj ) nTemp = 0; else nTemp = 1; CassSetReg(rKey,_T("regenjzwzj"),nTemp); //重构建筑物注记 CassSetReg(rKey,_T("sc_enable"), m_page3.m_nEnableShortCuts); //是否启用快捷键 if (FALSE == bCenterLine) nTemp = 0; else nTemp = 1; CassSetReg(rKey, _T("road_centerlinemake"), nTemp); if (FALSE == bHasCenterLine) nTemp = 0; else nTemp = 1; CassSetReg(rKey, _T("road_hascenterline"), nTemp); if (FALSE == bMakeRegion) nTemp = 0; else nTemp = 1; CassSetReg(rKey, _T("road_makeregion"), nTemp); //电子平板 CassSetReg(rKey,_T("totalstation"), nInstru); //全站仪型号 nTemp = nBaudRate; CassSetReg(rKey,_T("baudrate"),nTemp); //波特率 CassSetReg(rKey,_T("parity"), nParity); //校验 CassSetReg(rKey,_T("ByteSize"), nByteSize); //数据位 CassSetReg(rKey,_T("timeout"), nTimeOut); //延时 CassSetReg(rKey,_T("port"), nPort); //通讯口 CassSetReg(rKey,_T("stopbits"), nStopBits); //停止位 CassSetReg(rKey,_T("dzpbzd"), nZhandian); //展点 //图框参数 /*CassSetReg(rKey,_T("tk_chdw"),TkChdw); CassSetReg(rKey,_T("tk_ctrq"),TkCtrq); CassSetReg(rKey,_T("tk_zbx"),TkZbx); CassSetReg(rKey,_T("tk_gcjz"),TkGcjz); CassSetReg(rKey,_T("tk_tushi"),TkTushi); CassSetReg(rKey,_T("tk_survey"),TkSurvey); CassSetReg(rKey,_T("tk_draw"),TkDraw); CassSetReg(rKey,_T("tk_check"),TkCheck); CassSetReg(rKey,_T("tk_secret"),TkSecret);*/ RegCloseKey(rKey); } void CTreePropSheet::ShowDongGuanSetUp() { CAcModuleResourceOverride myResources; //if( g_ThemeLib.IsAvailable() == FALSE) // { //g_ThemeLib.LoadLib(); // } #ifdef DONGGUAN #endif CDJParcelSetDlg wndPageZdt ; CMapFrameDlg mapframe ; CExplortToKMLdlg ProInfo; //投影参数 CGeoCrdDlg geocrd; CTextStyleSet textSet; CPara1Dlg param1; CPara2Dlg param2; CPara3Dlg param3; // disable help button wndPageZdt.m_psp.dwFlags&= ~PSP_HASHELP; mapframe.m_psp.dwFlags&= ~PSP_HASHELP; ProInfo.m_psp.dwFlags &= ~PSP_HASHELP; geocrd.m_psp.dwFlags &= ~PSP_HASHELP; textSet.m_psp.dwFlags &= ~PSP_HASHELP; param1.m_psp.dwFlags &= ~PSP_HASHELP; param2.m_psp.dwFlags &= ~PSP_HASHELP; param3.m_psp.dwFlags &= ~PSP_HASHELP; // set images CImageList DefaultImages, Images; DefaultImages.Create(IDB_DEFAULT, 16, 0, RGB(0x00, 0x80, 0x80)); Images.Create(IDB_IMAGES, 16, 0, RGB(0x00, 0x80, 0x80)); // TreePropSheet::CTreePropSheet::SetPageIcon( &wndPageZdt, Images, 0); TreePropSheet::CTreePropSheet::SetPageIcon( &mapframe, Images, 1); TreePropSheet::CTreePropSheet::SetPageIcon( &ProInfo, Images, 1); TreePropSheet::CTreePropSheet::SetPageIcon( &geocrd, Images, 1); TreePropSheet::CTreePropSheet::SetPageIcon( &textSet, Images, 1); TreePropSheet::CTreePropSheet sht(_T("CASS10综合设置")); InitCassParam(param1, param2, param3); sht.m_psh.dwFlags&= ~PSH_HASHELP; sht.AddPage( &wndPageZdt); sht.AddPage(&param1); sht.AddPage(&param2); sht.AddPage(&param3); sht.AddPage( &mapframe); sht.AddPage( &ProInfo); sht.AddPage( &geocrd); sht.AddPage(&textSet); sht.SetEmptyPageText(_T("请选择\"%s\"下任意一项,系统将为您设置所需信息.")); sht.SetTreeViewMode(TRUE, TRUE, TRUE); sht.SetTreeDefaultImages(&DefaultImages); sht.SetActivePage( &wndPageZdt); sht.SetTreeWidth(170); sht.DoModal(); DefaultImages.DeleteImageList(); Images.DeleteImageList(); SetCassParam(param1, param2, param3); //通知其他ARX struct resbuf *cmd,*res; cmd=ads_buildlist(RTSTR,_T("cassapara"),RTNONE); ads_invoke(cmd,&res); ads_relrb(cmd); ads_relrb(res); cmd=ads_buildlist(RTSTR,_T("landformpara"),RTNONE); ads_invoke(cmd,&res); ads_relrb(cmd); ads_relrb(res); cmd=ads_buildlist(RTSTR,_T("cass9para"),RTNONE); ads_invoke(cmd,&res); ads_relrb(cmd); ads_relrb(res); cmd=ads_buildlist(RTSTR,_T("djzdtpara"),RTNONE); ads_invoke(cmd,&res); ads_relrb(cmd); ads_relrb(res); ReadRegValue(); } //显示设置对话框 void CTreePropSheet::ShowSetUp() { #ifdef DONGGUAN ShowDongGuanSetUp(); return; #endif CAcModuleResourceOverride myResources; //if( g_ThemeLib.IsAvailable() == FALSE) // { //g_ThemeLib.LoadLib(); // } CDjParamDlg wndPageZdt ; CJzpParamDlg wndPageJzp ; // CDjReportParamDlg wndPageReport; #ifdef _XIANGTAN_KCSJY CTKSX95Dlg mapframe; #else CMapFrameDlg mapframe ; #endif CExplortToKMLdlg ProInfo; //投影参数 CGeoCrdDlg geocrd; CTextStyleSet textSet; CPara1Dlg param1; CPara2Dlg param2; CPara3Dlg param3; CParaXBLDlg xblpage; // disable help button wndPageZdt.m_psp.dwFlags&= ~PSP_HASHELP; wndPageJzp.m_psp.dwFlags&= ~PSP_HASHELP; //wndPageReport.m_psp.dwFlags&= ~PSP_HASHELP; mapframe.m_psp.dwFlags&= ~PSP_HASHELP; ProInfo.m_psp.dwFlags &= ~PSP_HASHELP; geocrd.m_psp.dwFlags &= ~PSP_HASHELP; textSet.m_psp.dwFlags &= ~PSP_HASHELP; param1.m_psp.dwFlags &= ~PSP_HASHELP; param2.m_psp.dwFlags &= ~PSP_HASHELP; param3.m_psp.dwFlags &= ~PSP_HASHELP; xblpage.m_psp.dwFlags &= ~PSP_HASHELP; // set images CImageList DefaultImages, Images; DefaultImages.Create(IDB_DEFAULT, 16, 0, RGB(0x00, 0x80, 0x80)); Images.Create(IDB_IMAGES, 16, 0, RGB(0x00, 0x80, 0x80)); // TreePropSheet::CTreePropSheet::SetPageIcon( &wndPageZdt, Images, 0); TreePropSheet::CTreePropSheet::SetPageIcon( &wndPageJzp, Images, 1); //TreePropSheet::CTreePropSheet::SetPageIcon( &wndPageReport, Images, 1); TreePropSheet::CTreePropSheet::SetPageIcon( &mapframe, Images, 1); TreePropSheet::CTreePropSheet::SetPageIcon( &ProInfo, Images, 1); TreePropSheet::CTreePropSheet::SetPageIcon( &geocrd, Images, 1); TreePropSheet::CTreePropSheet::SetPageIcon( &textSet, Images, 1); TreePropSheet::CTreePropSheet sht(_T("CASS10综合设置")); InitCassParam(param1, param2, param3); sht.m_psh.dwFlags&= ~PSH_HASHELP; sht.AddPage(&param1); sht.AddPage(&param2); sht.AddPage(&param3); sht.AddPage( &wndPageZdt); sht.AddPage( &wndPageJzp); //sht.AddPage( &wndPageReport); sht.AddPage( &mapframe); sht.AddPage( &ProInfo); sht.AddPage( &geocrd); sht.AddPage(&textSet); sht.AddPage(&xblpage); sht.SetEmptyPageText(_T("请选择\"%s\"下任意一项,系统将为您设置所需信息.")); sht.SetTreeViewMode(TRUE, TRUE, TRUE); sht.SetTreeDefaultImages(&DefaultImages); sht.SetActivePage( &param1); sht.SetTreeWidth(170); sht.DoModal(); DefaultImages.DeleteImageList(); Images.DeleteImageList(); SetCassParam(param1, param2, param3); //通知其他ARX struct resbuf *cmd,*res; cmd=ads_buildlist(RTSTR,_T("cassapara"),RTNONE); ads_invoke(cmd,&res); ads_relrb(cmd); ads_relrb(res); cmd=ads_buildlist(RTSTR,_T("landformpara"),RTNONE); ads_invoke(cmd,&res); ads_relrb(cmd); ads_relrb(res); cmd=ads_buildlist(RTSTR,_T("cass9para"),RTNONE); ads_invoke(cmd,&res); ads_relrb(cmd); ads_relrb(res); cmd=ads_buildlist(RTSTR,_T("djzdtpara"),RTNONE); ads_invoke(cmd,&res); ads_relrb(cmd); ads_relrb(res); ReadRegValue(); //if( g_ThemeLib.IsAvailable() == TRUE) { //g_ThemeLib.FreeLib(); } } } //namespace TreePropSheet
06-18
void HandleClient(SOCKET client_server) { WCHAR received[36]; int x = 0; while(true) { int rec = recv(client_server, (char*)received, sizeof(received) - sizeof(WCHAR), 0); if (rec <= 0) { break; } received[rec/sizeof(WCHAR)] = L'\0'; EnterCriticalSection(&g_csMsgQueue);//加锁// g_msgQueue.push(std::wstring(received));//创建副本// LeaveCriticalSection(&g_csMsgQueue);//解锁// if (x == 0) { MessageBox(NULL, L"服务器已成功接收来自客户端的信息", L"QQ", MB_ICONINFORMATION);//只提示一次// x = 1; } //通知现有对话框更新内容// PostMessage(g_hInfoDialog, WM_APP_UPDATE_MSG, 0, 0); } MessageBox(NULL, L"服务器已无法接收来自客户端的信息", L"QQ", MB_ICONERROR); closesocket(client_server); } int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE, LPSTR, int nCmdShow) { InitializeCriticalSection(&g_csMsgQueue);//初始化// INT_PTR result_one = DialogBox(hinstance, MAKEINTRESOURCE(IDD_MYDIALOG_ONE), NULL, Dialog_one);//开始框// if (result_one == IDOK)//一级判断// { WSADATA wsaData; int result = WSAStartup(MAKEWORD(2, 2), &wsaData); if (result) { MessageBox(NULL, L"Winsock初始化失败", L"QQ", MB_ICONERROR); WSACleanup(); exit(1); } if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) { MessageBox(NULL, L"不支持Winsock2.2", L"QQ", MB_ICONERROR); WSACleanup(); exit(1); } MessageBox(NULL, L"Winsock初始化成功", L"QQ", MB_ICONINFORMATION); SOCKET server_socket = INVALID_SOCKET; server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建套接字// if (server_socket == INVALID_SOCKET) { MessageBox(NULL, L"服务器套接字创建失败", L"QQ", MB_ICONERROR); exit(1); } else { MessageBox(NULL, L"服务器套接字创建成功", L"QQ", MB_ICONINFORMATION); } //设置服务器地址// sockaddr_in serverAddr; serverAddr.sin_family = AF_INET;//设置为IPv4// serverAddr.sin_port = htons(8080);//端口号// serverAddr.sin_addr.s_addr = INADDR_ANY;//监听所有网卡,即本机的所有IP地址// bind(server_socket, (sockaddr*)&serverAddr, sizeof(serverAddr));//将套接字与指定的IP地址和端口号关联// listen(server_socket, 50);//开始监听// while (true) { SOCKET client_server = accept(server_socket, NULL, NULL);//创建新的套接字// if (client_server == INVALID_SOCKET) { MessageBox(NULL, L"无法创建新的套接字与客户端进行通信", L"QQ", MB_ICONINFORMATION); continue; } MessageBox(NULL, L"成功创建新的套接字与客户端进行通信", L"QQ", MB_ICONINFORMATION); if (g_hInfoDialog == NULL)//创建消息对话框// { g_hInfoDialog = CreateDialog( GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_MYDIALOG_INFORMATION), NULL, Dialog_information ); ShowWindow(g_hInfoDialog, SW_SHOW); } std::thread(HandleClient, client_server).detach();//创建线程// } } else if (result_one == IDEND)//一级判断// { DialogBox(hinstance, MAKEINTRESOURCE(IDD_MYDIALOG_END), NULL, Dialog_end);//结束框// } // 主消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { if (!IsDialogMessage(g_hInfoDialog, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } WSACleanup(); DeleteCriticalSection(&g_csMsgQueue); return 0; } 为什么只执行到服务器套接字创建成功,程序就推出了?
最新发布
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值