#include "stdafx.h" #include "rectMaker.h" void CopyDbRect(TDbRect* pSR,TDbRect*pDR) { /* pDR->SetRectFlag(pSR->GetRectFlag()); pDR->SetNormal(pSR->GetNormal()); pDR->SetSizeX(pSR->GetSizeX()); pDR->SetSizeY(pSR->GetSizeY()); pDR->SetSizeZ(pSR->GetSizeZ()); pDR->SetCenter(pSR->GetCenter()); pDR->SetRotation(pSR->GetRotation()); */ CopyObject(*pSR, *pDR); } TRectJig::TRectJig(CCubicSetDlg*pD):pDlg(pD) { } void TRectJig::SetStandardBaseType(int iType)//设置标准基点类型,跳过任意基点类型 { double x=pRect->GetSizeX(),y=pRect->GetSizeY(); switch(iType){ case 0:distVector=XPoint(x/2,-y/2);break; case 1:distVector=XPoint(0,0);break; case 2:distVector=XPoint(x,0);break; case 3:distVector=XPoint(x,-y);break; case 4:distVector=XPoint(0,-y);break; } } void TRectJig::UpdateData(XPoint ptInsert) { pRect->SetRotation(Ucs2Wcs(0.0)); pDlg->UpdateData(); if (pDlg->IsInsertMode()) { SetStandardBaseType(pDlg->basePointType); XVector3D vt=Ucs2Wcs(XVector3D(0,0,1),TRUE); pRect->SetNormal(vt); XPoint vt1(pDlg->length/2,-pDlg->width/2,0); pRect->SetCenter(Ucs2Ecs(ptInsert-distVector+vt1,vt)); } else if (ptCount==0) pt=ptInsert; else { XVector3D vt=Ucs2Wcs(XVector3D(0,0,1), TRUE); XRectAngle box(pt, ptInsert); XPoint ptCen; Midpoint(pt, ptInsert, ptCen); pRect->SetNormal(vt); pRect->SetCenter(Ucs2Ecs(ptCen, vt)); pRect->SetSizeX(box.Width()); pRect->SetSizeY(box.Height()); pDlg->UpdateSize(box.Width(),box.Height()); } pDlg->Init(*pRect); } void TRectJig::MakeIt() {//执行拖制 ptCount=0; pRect=NULL; bool bContinue=true; while(bContinue){ if (pRect==NULL) { pRect=new TDbRect; pRect->SetSizeX(100); pRect->SetSizeY(100); } int oldMode=pDlg->makeMode; int status; try { status=DoIt(); }catch(...){ status=RTERROR; } if (status==RTNORM){//正常取点 if (!pDlg->IsInsertMode()){ ptCount++; if (ptCount==1) continue; else ptCount=0; } bContinue=pDlg->IsContinue();//one finished,make more? if (pDlg->length<1E-6||pDlg->width<1E-6)//add by fxj 090410 setDispPrompt(_T("\n请输入合理数值!")); else pRect->AddToCSpace(Adesk::kTrue); pRect=NULL; } else if (status==RTKWORD){//用户键入命令 switch(nRetKey) { case 1://I/D,keyword mode pDlg->UpdateMakeMode(pDlg->IsInsertMode()?0:1); if (!pDlg->IsInsertMode()){//U pRect->SetSizeX(100); pRect->SetSizeY(100); ptCount=0; } break; case 2: if (!pDlg->IsInsertMode()){//U,UNDO pRect->SetSizeX(100); pRect->SetSizeY(100); ptCount=0; }else{//F,对齐 TDbRect *pTempRect=new TDbRect; CopyDbRect(pRect,pTempRect); AcDbObjectId idTemp=pTempRect->AddToCSpace(Adesk::kTrue); int nOsMode=0; xg_getvar(_T("OSMODE"), &nOsMode); nOsMode &= ~0x4000; nOsMode |= OS_INT|OS_NEA|OS_PER|OS_END|OS_MID|OS_CEN; XPushVar vOsMode(_T("OSMODE"), nOsMode); XPoint pt1, pt2, qt1, qt2; pDlg->ShowWindow(SW_HIDE); if (ads_getpoint(NULL, _T("\n对齐参考点:"), pt1)==RTNORM && ads_getpoint(pt1, _T("\n对齐参考轴:"), pt2)==RTNORM && ads_getpoint(NULL, _T("\n对齐目标点:"), qt1)==RTNORM && ads_getpoint(qt1, _T("\n对齐目标轴:"), qt2)==RTNORM) { pt1=Ucs2Wcs(pt1); pt2=Ucs2Wcs(pt2); qt1=Ucs2Wcs(qt1); qt2=Ucs2Wcs(qt2); double nRot=CT_std_angle(ads_angle(qt1, qt2)-ads_angle(pt1, pt2)); ads_matrix matMov, matRot; pt1.GetMoveMatrix(qt1, matMov); qt1.GetRotationMatrix(nRot, matRot); pRect->transformBy(AsAcGeMatrix3d(matMov)); pRect->transformBy(AsAcGeMatrix3d(matRot)); bContinue=pDlg->IsContinue();//one finished,make more? pRect->AddToCSpace(Adesk::kTrue); pRect=NULL; } pDlg->ShowWindow(SW_NORMAL); acedGetAcadFrame()->SetFocus(); OPENOBJ_BEGIN(idTemp, AcDb::kForWrite, AcDbEntity, pEnt); if (pEnt) pEnt->erase(); OPENOBJ_END(); } break; case 3://T,改基点 { TDbRect *pTempRect=new TDbRect; CopyDbRect(pRect,pTempRect); AcDbObjectId idTemp=pTempRect->AddToCSpace(Adesk::kTrue); int nOsMode=0; xg_getvar(_T("OSMODE"), &nOsMode); nOsMode &= ~0x4000; nOsMode |= OS_INT|OS_NEA|OS_PER|OS_END|OS_MID|OS_CEN; XPushVar vOsMode(_T("OSMODE"), nOsMode); XPoint ptTemp; pDlg->ShowWindow(SW_HIDE); int nRet=XGetPoint(NULL, _T("\n输入插入点"), ptTemp); pDlg->ShowWindow(SW_NORMAL); acedGetAcadFrame()->SetFocus(); if (nRet==RTNORM) { pDlg->ResetBaseType();//清除标准基点类型 distVector=ptTemp-Ecs2Ucs(pRect->GetUpLeft(),Ucs2Wcs(XVector3D(0,0,1),TRUE)); } OPENOBJ_BEGIN(idTemp, AcDb::kForWrite, AcDbEntity, pEnt); if (pEnt) pEnt->erase(); OPENOBJ_END(); } } }else{ if (status==RTNONE){ if (pDlg->makeMode!=oldMode){//Dialog make mode changed if (!pDlg->IsInsertMode()){ pRect->SetSizeX(100); pRect->SetSizeY(100); ptCount=0; } continue; }else if (pDlg->bEditChanged){//Edit Control lose focus; pDlg->bEditChanged=false; continue; } } bContinue=false;//Close Dialog,Esc or Enter None if (pRect!=NULL) delete pRect; } } } int TRectJig::DoIt() { int nRet; if (!pDlg->IsInsertMode()){ if (ptCount==0){ setDispPrompt(_T("\n输入第一个角点或 [插入矩形(I)]<退出>:")); INITGET_BEG(-1,_T("I")); nRet=drag(); INITGET_END(); }else { setDispPrompt(_T("\n输入第二个角点或 [插入矩形(I)/撤消第一个角点(U)]<退出>:")); INITGET_BEG(-1,_T("I U")); nRet=drag(); INITGET_END(); } } else { //if (pDlg->length<1E-6||pDlg->width<1E-6)//modified by fxj 090410//(LessEqual(pDlg->length,0)&&LessEqual(pDlg->width,0)) //{ // pDlg->length =100; // pDlg->width = 100; // setDispPrompt(_T("\n请输入合理数值!")); // return RTNORM; //} setDispPrompt(_T("\n输入插入点或 [拖制矩形(D)/对齐(F)/改基点(T)]<退出>:")); INITGET_BEG(-1,_T("D F T")); nRet=drag(); INITGET_END(); } if (nRet == AcEdJig::kCancel) return RTCAN; else if (nRet == AcEdJig::kNull) return RTNONE; else if (nRet <= 0) return RTNORM; else { nRetKey=nRet; return RTKWORD; } } AcEdJig::DragStatus TRectJig::sampler() { setUserInputControls((UserInputControls) (AcEdJig::kAccept3dCoordinates | AcEdJig::kNullResponseAccepted |AcEdJig::kNoNegativeResponseAccepted|AcEdJig::kNoZeroResponseAccepted)); if (pDlg->IsInsertMode()) setKeywordList(_T("D F T")); else if (ptCount==0) setKeywordList(_T("I")); else setKeywordList(_T("I U")); XPoint ptTemp; CPoint ptCursor; if (GetCursorPos(&ptCursor)) { acedGetAcadDwgView()->ScreenToClient(&ptCursor); acedCoordFromPixelToWorld(ptCursor, ptTemp); } DragStatus stat=acquirePoint(ptTemp);//起始点与终点相同,使之不绘制橡皮线,使用acquirePoint(ptTemp)出现了不明错误 ptTemp=Wcs2Ucs(ptTemp); if (stat==AcEdJig::kNormal&&ptTemp==oldPoint) return AcEdJig::kNoChange; oldPoint=ptTemp; if (stat==AcEdJig::kNormal) UpdateData(ptTemp); return stat; } Adesk::Boolean TRectJig::update() { if ((!pDlg->IsInsertMode()&&ptCount==0)|| fabs(pRect->GetSizeX()*pRect->GetSizeY())<=_DIST_SNAP) return Adesk::kFalse; return Adesk::kTrue; } AcDbEntity* TRectJig::entity() const { return pRect; } ///////////////////////////////////////////////////////////////////////////////////////////// // CCubicSetDlg dialog BOOL CCubicSetDlg::b3D=FALSE; BOOL CCubicSetDlg::bMore=TRUE; short CCubicSetDlg::crossMode=0; short CCubicSetDlg::makeMode=0; double CCubicSetDlg::elev=0.0; double CCubicSetDlg::height=0.0; double CCubicSetDlg::length=100.0; double CCubicSetDlg::width=100.0; int CCubicSetDlg::basePointType=0;//中心 static UINT buttonID[]={ID_DRAG,ID_INSERT, ID_3D, ID_NOCROSS,ID_CROSSA,ID_CROSSB,ID_CROSSC, ID_LEFTUP,ID_RIGHTUP,ID_RIGHTDOWN,ID_LEFTDOWN,ID_CENTER, ID_MORE}; CCubicSetDlg::CCubicSetDlg(bool bCreating) : CUIDlg(CCubicSetDlg::IDD, acedGetAcadFrame()) { bCreate=bCreating; bDlgClosing=false; bInit=true; bEditChanged=false; if (basePointType<0||basePointType>4) basePointType=0;//初始基点类型不能是非标准类型。 } CCubicSetDlg::~CCubicSetDlg() { } BOOL CCubicSetDlg::Create() { return CUIDlg::Create(CCubicSetDlg::IDD,acedGetAcadFrame()); } void CCubicSetDlg::DoDataExchange(CDataExchange* pDX) { CUIDlg::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCubicSetDlg) //}}AFX_DATA_MAP if (pDX->m_bSaveAndValidate) {//modified by fxj 090526 CString sHeight,sLength,sWidth,sElev; DDX_Text(pDX, IDC_HEIGHT, sHeight); DDX_Text(pDX, IDC_LENGTH, sLength); DDX_Text(pDX, IDC_WIDTH, sWidth); DDX_Text(pDX, IDC_ELEV, sElev); height=_tstof(sHeight); length=_tstof(sLength); width=_tstof(sWidth); elev=_tstof(sElev); } else { GetDlgItem(IDC_HEIGHT)->SetWindowText(Dist2Str(height)); GetDlgItem(IDC_LENGTH)->SetWindowText(Dist2Str(length)); GetDlgItem(IDC_WIDTH)->SetWindowText(Dist2Str(width)); GetDlgItem(IDC_ELEV)->SetWindowText(Dist2Str(elev)); } } void CCubicSetDlg::ResetBaseType() { switch(basePointType){ case 0:m_toolbar.CheckButton(ID_CENTER,FALSE);break; case 1:m_toolbar.CheckButton(ID_LEFTUP,FALSE);break; case 2:m_toolbar.CheckButton(ID_RIGHTUP,FALSE);break; case 3:m_toolbar.CheckButton(ID_RIGHTDOWN,FALSE);break; case 4:m_toolbar.CheckButton(ID_LEFTDOWN,FALSE);break; } basePointType=5;//任意基点 } void CCubicSetDlg::UpdateMakeMode(int mode)//inform { makeMode=mode; m_toolbar.CheckButton(buttonID[makeMode],TRUE); GetDlgItem(IDC_WIDTH)->EnableWindow(makeMode!=0); GetDlgItem(IDC_LENGTH)->EnableWindow(makeMode!=0); if (makeMode==1){ m_toolbar.EnableButton(ID_LEFTUP,TRUE); m_toolbar.EnableButton(ID_RIGHTUP,TRUE); m_toolbar.EnableButton(ID_RIGHTDOWN,TRUE); m_toolbar.EnableButton(ID_LEFTDOWN,TRUE); m_toolbar.EnableButton(ID_CENTER,TRUE); }else{ m_toolbar.EnableButton(ID_LEFTUP,FALSE); m_toolbar.EnableButton(ID_RIGHTUP,FALSE); m_toolbar.EnableButton(ID_RIGHTDOWN,FALSE); m_toolbar.EnableButton(ID_LEFTDOWN,FALSE); m_toolbar.EnableButton(ID_CENTER,FALSE); } } void CCubicSetDlg::UpdateSize(double l,double w) { length=l; width=w; GetDlgItem(IDC_LENGTH)->SetWindowText(Dist2Str(l)); GetDlgItem(IDC_WIDTH)->SetWindowText(Dist2Str(w)); } BEGIN_MESSAGE_MAP(CCubicSetDlg, CUIDlg) //{{AFX_MSG_MAP(CCubicSetDlg) ON_EN_KILLFOCUS(IDC_LENGTH, OnEdited) ON_EN_KILLFOCUS(IDC_WIDTH,OnEdited) ON_EN_KILLFOCUS(IDC_HEIGHT,OnEdited) ON_EN_KILLFOCUS(IDC_ELEV,OnEdited) ON_COMMAND(ID_NOCROSS,OnNoCross) ON_COMMAND(ID_CROSSA,OnCrossA) ON_COMMAND(ID_CROSSB,OnCrossB) ON_COMMAND(ID_CROSSC,OnCrossC) ON_COMMAND(ID_DRAG,OnDragMode) ON_COMMAND(ID_INSERT,OnInsertMode) ON_COMMAND(ID_3D,On3d) ON_COMMAND(ID_MORE,OnMore) ON_COMMAND(ID_LEFTUP,OnLeftUp) ON_COMMAND(ID_LEFTDOWN,OnLeftDown) ON_COMMAND(ID_RIGHTUP,OnRightUp) ON_COMMAND(ID_RIGHTDOWN,OnRightDown) ON_COMMAND(ID_CENTER,OnCenter) ON_WM_CLOSE() //}}AFX_MSG_MAP ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText) END_MESSAGE_MAP() void CCubicSetDlg::OnLeftUp() { basePointType=1; } void CCubicSetDlg::OnRightUp() { basePointType=2; } void CCubicSetDlg::OnRightDown() { basePointType=3; } void CCubicSetDlg::OnLeftDown() { basePointType=4; } void CCubicSetDlg::OnCenter() { basePointType=0; } void CCubicSetDlg::OnClose() { if (bCreate){ acedPostCommand(_T("\33")); bDlgClosing=true; } else SendMessage(WM_COMMAND,IDCANCEL); } void CCubicSetDlg::OnMore() { bMore=!bMore; } void CCubicSetDlg::On3d() { b3D=!b3D; GetDlgItem(IDC_ELEV)->EnableWindow(b3D); GetDlgItem(IDC_HEIGHT)->EnableWindow(b3D); } void CCubicSetDlg::OnNoCross() { crossMode=0; } void CCubicSetDlg::OnCrossA() { crossMode=1; } void CCubicSetDlg::OnCrossB() { crossMode=2; } void CCubicSetDlg::OnCrossC() { crossMode=3; } void CCubicSetDlg::OnDragMode() { makeMode=0; GetDlgItem(IDC_WIDTH)->EnableWindow(FALSE); GetDlgItem(IDC_LENGTH)->EnableWindow(FALSE); m_toolbar.EnableButton(ID_LEFTUP,FALSE); m_toolbar.EnableButton(ID_RIGHTUP,FALSE); m_toolbar.EnableButton(ID_RIGHTDOWN,FALSE); m_toolbar.EnableButton(ID_LEFTDOWN,FALSE); m_toolbar.EnableButton(ID_CENTER,FALSE); acedPostCommand(_T("\n")); } void CCubicSetDlg::OnInsertMode() { makeMode=1; GetDlgItem(IDC_WIDTH)->EnableWindow(TRUE); GetDlgItem(IDC_LENGTH)->EnableWindow(TRUE); m_toolbar.EnableButton(ID_LEFTUP,TRUE); m_toolbar.EnableButton(ID_RIGHTUP,TRUE); m_toolbar.EnableButton(ID_RIGHTDOWN,TRUE); m_toolbar.EnableButton(ID_LEFTDOWN,TRUE); m_toolbar.EnableButton(ID_CENTER,TRUE); acedPostCommand(_T("\n"));//INFORM RTNONE } void CCubicSetDlg::OnEdited()//解决关键字输入后有时仍需要按回车的问题(可能因为命令行键盘输入机制与全局键盘输入机制未能协调一致) { if (bInit)//第一个消息不处理 { bInit=false; return; } if (bDlgClosing)//最后一个消息不处理 return; acedPostCommand(_T("\n")); bEditChanged=true; } void CCubicSetDlg::Init(TDbRect&rect,bool bOut) { if (bOut) { if (!bCreate)//add by fxj 090415 { if (length<1E-6 || width<1E-6) { adsout << _T("\n长或宽不能太小!"); return; } } XPoint ptCenter=rect.GetCenter(),ptBase0,ptBase1; ptBase0=ptBase1=ptCenter; if (!bCreate)//editing { switch(basePointType){ case 1:ptBase0=rect.GetUpLeft();break; case 2:ptBase0=rect.GetUpRight();break; case 3:ptBase0=rect.GetLowRight();break; case 4:ptBase0=rect.GetLowLeft();break; } ptBase0.z=ptCenter.z; } rect.SetBaseFlag((TDbRect::BasePosition)basePointType); rect.SetElevation(b3D?elev:0); if (makeMode==1||!bCreate)//insert mode and editing { rect.SetSizeX(length); rect.SetSizeY(width); } rect.SetSizeZ(b3D?height:0); if (crossMode==0) rect.SetRectFlag(0); else if (crossMode==1) rect.SetRectFlag(RF_DIA45); else if (crossMode==2) rect.SetRectFlag(RF_DIA135); else rect.SetRectFlag(RF_CROSSING); if (!bCreate)//editing { switch(basePointType){ case 1:ptBase1=rect.GetUpLeft();break; case 2:ptBase1=rect.GetUpRight();break; case 3:ptBase1=rect.GetLowRight();break; case 4:ptBase1=rect.GetLowLeft();break; } ptBase1.z=ptCenter.z; ads_matrix mat; ptBase1.GetMoveMatrix(ptBase0,mat); rect.transformBy(AsAcGeMatrix3d(mat)); } }else{ basePointType = (int)rect.GetBaseFlag(); elev=rect.GetElevation(); length=rect.GetSizeX(); width=rect.GetSizeY(); height=rect.GetSizeZ(); b3D=fabs(elev)>_DIST_SNAP||height>_DIST_SNAP; if (rect.GetRectFlag()==0) crossMode=0; else if (rect.GetRectFlag()==RF_DIA45) crossMode=1; else if (rect.GetRectFlag()==RF_DIA135) crossMode=2; else crossMode=3; } } BOOL CCubicSetDlg::OnInitDialog() { CUIDlg::OnInitDialog(); if (!bCreate) SetWindowText(_T("空间矩形编辑")); GetDlgItem(IDC_ELEV)->EnableWindow(b3D); GetDlgItem(IDC_HEIGHT)->EnableWindow(b3D); if (bCreate){ GetDlgItem(IDOK)->ShowWindow(SW_HIDE); GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE); CRect rect; GetWindowRect(&rect); SetWindowPos(NULL,rect.left,rect.top,rect.Width(),rect.Height()-22,0); if (makeMode==0)//dragMode { GetDlgItem(IDC_LENGTH)->EnableWindow(FALSE); GetDlgItem(IDC_WIDTH)->EnableWindow(FALSE); } } CreateToolBar(); UpdateData(false); return TRUE; } void CCubicSetDlg::CreateToolBar() { CAcModuleResourceOverride vTmp; m_toolbar.Create( WS_VISIBLE | WS_CHILD | CCS_TOP|TBSTYLE_TOOLTIPS | CCS_ADJUSTABLE ,CRect(0,0,0,0),this, IDR_RECT); TBBUTTON *pIndex, *pRTF_Button = new TBBUTTON[13]; pIndex = pRTF_Button; for(long lIndex = 0; lIndex < 13; lIndex++) { memset(pIndex ,NULL, sizeof(TBBUTTON)); pIndex->iBitmap = lIndex; pIndex->idCommand = buttonID[lIndex]; if (lIndex==2||lIndex==12) pIndex->fsStyle=TBSTYLE_CHECK; else pIndex->fsStyle =TBSTYLE_CHECKGROUP; pIndex->fsState = TBSTATE_ENABLED; pIndex++; } CSize size(16, 15); m_toolbar.SetButtonSize(size); m_toolbar.AddButtons(13, pRTF_Button); pIndex=new TBBUTTON; memset(pIndex ,NULL, sizeof(TBBUTTON)); pIndex->fsStyle = TBSTYLE_SEP; m_toolbar.InsertButton(2,pIndex); m_toolbar.InsertButton(4,pIndex); m_toolbar.InsertButton(9,pIndex); m_toolbar.InsertButton(15,pIndex); delete pIndex; delete[] pRTF_Button; m_toolbar.SetBitmapSize(size); m_toolbar.ModifyStyle(0,TBSTYLE_FLAT); m_toolbar.AddBitmap(13, IDR_RECT); switch(basePointType){ case 0:m_toolbar.CheckButton(ID_CENTER,TRUE);break; case 1:m_toolbar.CheckButton(ID_LEFTUP,TRUE);break; case 2:m_toolbar.CheckButton(ID_RIGHTUP,TRUE);break; case 3:m_toolbar.CheckButton(ID_RIGHTDOWN,TRUE);break; case 4:m_toolbar.CheckButton(ID_LEFTDOWN,TRUE);break; } m_toolbar.CheckButton(buttonID[makeMode],TRUE); m_toolbar.CheckButton(ID_3D,b3D); m_toolbar.CheckButton(buttonID[crossMode+3],TRUE); m_toolbar.CheckButton(ID_MORE,bMore); if (!bCreate){ m_toolbar.EnableButton(ID_DRAG,FALSE); m_toolbar.EnableButton(ID_INSERT,FALSE); m_toolbar.EnableButton(ID_MORE,FALSE); } if (bCreate&&!IsInsertMode()){ m_toolbar.EnableButton(ID_LEFTUP,FALSE); m_toolbar.EnableButton(ID_RIGHTUP,FALSE); m_toolbar.EnableButton(ID_RIGHTDOWN,FALSE); m_toolbar.EnableButton(ID_LEFTDOWN,FALSE); m_toolbar.EnableButton(ID_CENTER,FALSE); } } BOOL CCubicSetDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult) { ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW); // if there is a top level routing frame then let it handle the message if (GetRoutingFrame() != NULL) return FALSE; // to be thorough we will need to handle UNICODE versions of the message also !! TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; //TCHAR szFullText[512]; CString strTipText; // Zyu modify on 100723,消除64位编译警告 //UINT nID = pNMHDR->idFrom; UINT nID = (UINT)pNMHDR->idFrom; if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) { // idFrom is actually the HWND of the tool //nID = ::GetDlgCtrlID((HWND)nID); return FALSE;//Add by whl on 060308 } if (nID != 0) {// will be zero on a separator { CAcModuleResourceOverride vTmp; strTipText.LoadString(nID); //=szFullText; } #ifndef _UNICODE if (pNMHDR->code == TTN_NEEDTEXTA) { lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText)); } else { _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #else if (pNMHDR->code == TTN_NEEDTEXTA) { _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText)); } else { lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #endif *pResult = 0; // bring the tooltip window above other popup windows ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE| SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); return TRUE; } return TRUE; } ////////////////////////////////////////////////////////////////////////////////////////////// //COMMAND: void CreateRectangle() { CCubicSetDlg dlg; CAcModuleResourceOverride vTemp; if (!dlg.Create()) return; acedGetAcadFrame()->SetFocus(); TRectJig jig(&dlg); CAcModuleResourceOverride resOverride(acedGetAcadResourceInstance()); jig.MakeIt(); dlg.DestroyWindow(); } int EditRect(AcDbObjectId idRect) { OPENOBJ_BEGIN(idRect, AcDb::kForRead, TDbRect, pRect); CAcModuleResourceOverride vTemp; CCubicSetDlg dlg(false); dlg.Init(*pRect,false); if (dlg.DoModal()==IDOK) { if (pRect->upgradeOpen()==Acad::eOk) { pRect->assertWriteEnabled(); dlg.Init(*pRect); } } OPENOBJ_END(); return RTNORM; }