// DarwBalconyDlg.cpp : implementation file // #include "stdafx.h" #include "DrawBalconyDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //////////////////////////////////////////////////////////////////////////// //extern GEOAPI int FindNearestEdge(const XPoly2D &poly, const XPoint &ptEdge); extern TARCH_IMPEXP int GetOpenPoly2D(const TCHAR *pMsg, XPoly2D &poly2d, Entity &entRet); extern int SearchBalcony(XPoly2D &polyBalc, XPoly2D &polyWall, XPoly2D &polyOutline); static int CompareInt(const int *p1, const void *p2) { if (*p1==*(const int *)p2) return 0; return 1; } extern void MakeWallSet(PickSet &ssWalls); ///////////////////////////////////////////////////////////////////////////// // CDarwBalconyDlg dialog ////CString CDarwBalconyDlg::m_Lenth=_T("1500"); ////CString CDarwBalconyDlg::m_Railwidth = _T("100"); ////CString CDarwBalconyDlg::m_Railheight = _T("1000"); ////CString CDarwBalconyDlg::m_Elev = _T("-100.0"); ////CString CDarwBalconyDlg::m_Slabthick = _T("100"); ////CString CDarwBalconyDlg::m_Girderthick = _T("100"); double CDarwBalconyDlg::m_Lenth=1500.0; double CDarwBalconyDlg::m_Railwidth = 100.0; double CDarwBalconyDlg::m_Railheight = 1000.0; double CDarwBalconyDlg::m_Elev = -100.0; double CDarwBalconyDlg::m_Slabthick = 100.0; double CDarwBalconyDlg::m_Girderthick =100.0; BOOL CDarwBalconyDlg::m_bhasGirder = FALSE; int CDarwBalconyDlg::m_nSide=OFFSET_LEFT; int CDarwBalconyDlg::g_nBalPath=1; BOOL SearchWallSide(XPoint ptStart,XPoint ptEnd,//世界坐标系下点 PickSet &ssWalls,//传入用户选的墙,不能有柱子 XPoly2D &polyWall);//返回沿墙poly ///////////////////////////////////////////////////////// // [11/15/2007 nsh] //临时变量 static double tLenth=1500.0; static double tRailwidth=100.0; static double tRailheight=1000.0; static double tElev=-100.0; static double tSlabthick=100.0; static double tGirderthick=100.0; //----------------------------------- IMPLEMENT_DYNAMIC(CDarwBalconyDlg,CModelessDialog) CDarwBalconyDlg::CDarwBalconyDlg(CWnd* pParent /*=NULL*/) : CModelessDialog(CDarwBalconyDlg::IDD, pParent) { //{{AFX_DATA_INIT(CDarwBalconyDlg) //}}AFX_DATA_INIT m_bUseEsc=TRUE; tbButtm[0].tbID = ID_BUTTON_DENT; tbButtm[0].BitmapID = 0; tbButtm[0].Style = TBSTYLE_CHECKGROUP; tbButtm[1].tbID = ID_BUTTON_RECT2; tbButtm[1].BitmapID = 1; tbButtm[1].Style = TBSTYLE_CHECKGROUP; tbButtm[2].tbID = ID_BUTTON_CONCAVE; tbButtm[2].BitmapID = 2; tbButtm[2].Style = TBSTYLE_CHECKGROUP; tbButtm[3].tbID = ID_BUTTON_EXTEND; tbButtm[3].BitmapID = 3; tbButtm[3].Style = TBSTYLE_CHECKGROUP; tbButtm[4].tbID = ID_BUTTON_ARBITRARY; tbButtm[4].BitmapID = 4; tbButtm[4].Style = TBSTYLE_CHECKGROUP; tbButtm[5].tbID = ID_BUTTON_SELECT; tbButtm[5].BitmapID = 5; tbButtm[5].Style = TBSTYLE_CHECKGROUP; // [11/15/2007 nsh]----------------------------- m_Lenth=_AS_SYS_UNIT(tLenth); m_Railwidth = _AS_SYS_UNIT(tRailwidth); m_Railheight = _AS_SYS_UNIT(tRailheight); m_Elev = _AS_SYS_UNIT(tElev); m_Slabthick = _AS_SYS_UNIT(tSlabthick); m_Girderthick =_AS_SYS_UNIT(tGirderthick); //----------------------------------------------- } // [11/15/2007 nsh] CDarwBalconyDlg::~CDarwBalconyDlg() { tLenth =_AS_MM(m_Lenth); tRailwidth=_AS_MM(m_Railwidth); tRailheight=_AS_MM(m_Railheight); tElev=_AS_MM(m_Elev); tSlabthick=_AS_MM(m_Slabthick); tGirderthick=_AS_MM(m_Girderthick); } //---------------------------------------- void CDarwBalconyDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDarwBalconyDlg) DDX_Text(pDX, IDC_LENTH, m_Lenth); DDX_Text(pDX, IDC_RAILWIDTH, m_Railwidth); DDX_Text(pDX, IDC_RAILHEIGHT, m_Railheight); DDX_Text(pDX, IDC_ELEV, m_Elev); DDX_Text(pDX, IDC_SLABTHICK, m_Slabthick); DDX_Text(pDX, IDC_GIRDERTHICK, m_Girderthick); DDX_Check(pDX, IDC_CHECK_GIRDER, m_bhasGirder); //}}AFX_DATA_MAP if (!pDX->m_bSaveAndValidate) { m_toolbar.CheckButton(ID_BUTTON_DENT,g_nBalPath==0); m_toolbar.CheckButton(ID_BUTTON_RECT2, g_nBalPath==1); m_toolbar.CheckButton(ID_BUTTON_CONCAVE, g_nBalPath==2); m_toolbar.CheckButton(ID_BUTTON_EXTEND, g_nBalPath==3); m_toolbar.CheckButton(ID_BUTTON_ARBITRARY, g_nBalPath==4); m_toolbar.CheckButton(ID_BUTTON_SELECT,g_nBalPath==5); } (GetDlgItem(IDC_LENTH))->EnableWindow(g_nBalPath==0||g_nBalPath==1||g_nBalPath==2||g_nBalPath==3); } BEGIN_MESSAGE_MAP(CDarwBalconyDlg, CModelessDialog) //{{AFX_MSG_MAP(CDarwBalconyDlg) ON_EN_SETFOCUS(IDC_RAILWIDTH, OnSetfocusRailwidth) ON_EN_SETFOCUS(IDC_RAILHEIGHT, OnSetfocusRailheight) ON_EN_SETFOCUS(IDC_GIRDERTHICK, OnSetfocusGirderthick) ON_EN_SETFOCUS(IDC_ELEV, OnSetfocusElev) ON_BN_CLICKED(IDC_CHECK_GIRDER, OnCheckGirder) ON_EN_SETFOCUS(IDC_SLABTHICK, OnSetfocusSlabthick) ON_EN_SETFOCUS(IDC_LENTH,OnSetfocusLength)// [12/11/2007 nsh] ON_WM_PAINT() ON_WM_CLOSE() ON_COMMAND(ID_BUTTON_DENT,OnCommandDent) ON_COMMAND(ID_BUTTON_RECT2,OnCommandRect) ON_COMMAND(ID_BUTTON_CONCAVE,OnCommandConcave) ON_COMMAND(ID_BUTTON_EXTEND,OnCommandExtend) ON_COMMAND(ID_BUTTON_ARBITRARY,OnCommandArbitrary) ON_COMMAND(ID_BUTTON_SELECT,OnCommandSelect) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDarwBalconyDlg message handlers BOOL CDarwBalconyDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); // TODO: Add extra initialization here CWnd *pWnd =GetDlgItem(IDC_GIRDERTHICK); pWnd->EnableWindow(m_bhasGirder); (GetDlgItem(IDC_LENTH))->EnableWindow(FALSE); OpenSlide(_T("TArch(BalWidth)")); CAcModuleResourceOverride vTmp; m_toolbar.Create( WS_VISIBLE | WS_CHILD |CCS_BOTTOM| TBSTYLE_TOOLTIPS | CCS_ADJUSTABLE ,CRect(0,0,0,0),this, IDR_TOOLBAR_BALCONY1); TBBUTTON *pIndex, *pRTF_Button = new TBBUTTON[6]; pIndex = pRTF_Button; for(long lIndex = 0; lIndex < 6; lIndex++) { memset(pIndex ,NULL, sizeof(TBBUTTON)); pIndex->iBitmap= tbButtm[lIndex].BitmapID; pIndex->idCommand = tbButtm[lIndex].tbID; pIndex->fsStyle = tbButtm[lIndex].Style; pIndex->fsState = TBSTATE_ENABLED; pIndex++; } CSize size(16, 15); m_toolbar.SetButtonSize(size); m_toolbar.AddButtons(6, pRTF_Button); delete[] pRTF_Button; m_toolbar.SetBitmapSize(size); m_toolbar.ModifyStyle(0,TBSTYLE_FLAT); m_toolbar.AddBitmap(4, IDR_TOOLBAR_BALCONY1); m_toolbar.AutoSize(); m_wndToolTip.Create(this); m_wndToolTip.Activate(true); UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CDarwBalconyDlg::OnClose() { acedPostCommand(_T("\33")); } void CDarwBalconyDlg::OpenSlide(XString strFilePath) { CWnd *pImageBox=GetDlgItem(IDC_SLIDE); if (pImageBox) { CDC *pDC=pImageBox->GetDC(); CRect rc; pImageBox->GetClientRect(&rc); m_slideDc.InitDC(pDC, rc, GetAcadBackColor()); m_slideDc.PaintSlide(strFilePath); m_slideDc.SetDC(NULL); pImageBox->ReleaseDC(pDC); } } void CDarwBalconyDlg::OnSetfocusRailwidth() { // TODO: Add your control notification handler code here OpenSlide(_T("TArch(BalWidth)")); } // [12/12/2007 nsh] //------------------begin------------------- void CDarwBalconyDlg::OnSetfocusLength() { OpenSlide(_T("TArch(BALength)")); } //-------------------end-------------------- void CDarwBalconyDlg::OnSetfocusRailheight() { // TODO: Add your control notification handler code here OpenSlide(_T("TArch(BalHeight)")); } void CDarwBalconyDlg::OnSetfocusGirderthick() { // TODO: Add your control notification handler code here OpenSlide(_T("TArch(BalGirder)")); } void CDarwBalconyDlg::OnSetfocusElev() { // TODO: Add your control notification handler code here OpenSlide(_T("TArch(BalElev)")); } void CDarwBalconyDlg::OnCheckGirder() { // TODO: Add your control notification handler code here m_bhasGirder = !m_bhasGirder; CWnd *pWnd =GetDlgItem(IDC_GIRDERTHICK); if (m_bhasGirder) pWnd->EnableWindow(true); else pWnd->EnableWindow(false); OpenSlide(_T("TArch(BalGirder)")); } void CDarwBalconyDlg::OnSetfocusSlabthick() { // TODO: Add your control notification handler code here OpenSlide(_T("TArch(BalSlab)")); } void CDarwBalconyDlg::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here CRect rcClip, rcImage; dc.GetClipBox(&rcClip); CWnd *pImageBox=GetDlgItem(IDC_SLIDE); if (pImageBox) { pImageBox->GetWindowRect(&rcImage); ScreenToClient(&rcImage); if (!rcImage.IntersectRect(&rcImage, &rcClip)) return; CDC *pDC=pImageBox->GetDC(); m_slideDc.SetDC(pDC); m_slideDc.Redraw(); m_slideDc.SetDC(NULL); pImageBox->ReleaseDC(pDC); } // Do not call CModelessDialog::OnPaint() for painting messages } void CDarwBalconyDlg::OnCommandDent() { if (g_nBalPath==0) return; UpdateData(TRUE); g_nBalPath=0; UpdateData(FALSE); m_bUseEsc=FALSE; acedPostCommand(_T("\33")); } void CDarwBalconyDlg::OnCommandRect() { if (g_nBalPath==1) return; UpdateData(TRUE); g_nBalPath=1; UpdateData(FALSE); m_bUseEsc=FALSE; acedPostCommand(_T("\33")); } void CDarwBalconyDlg::OnCommandConcave() { if (g_nBalPath==2) return; UpdateData(TRUE); g_nBalPath=2; UpdateData(FALSE); m_bUseEsc=FALSE; acedPostCommand(_T("\33")); } void CDarwBalconyDlg::OnCommandExtend() { if (g_nBalPath==3) return; UpdateData(TRUE); g_nBalPath=3; UpdateData(FALSE); m_bUseEsc=FALSE; acedPostCommand(_T("\33")); } void CDarwBalconyDlg::OnCommandArbitrary() { (GetDlgItem(IDC_LENTH))->EnableWindow(FALSE); if (g_nBalPath==4) return; UpdateData(TRUE); g_nBalPath=4; UpdateData(FALSE); m_bUseEsc=FALSE; acedPostCommand(_T("\33")); } void CDarwBalconyDlg::OnCommandSelect() { (GetDlgItem(IDC_LENTH))->EnableWindow(FALSE); if (g_nBalPath==5) return; UpdateData(TRUE); g_nBalPath=5; UpdateData(FALSE); m_bUseEsc=FALSE; acedPostCommand(_T("\33")); } void CDarwBalconyDlg::SetToolbarBtState1(int nBalPath) { m_toolbar.EnableButton(ID_BUTTON_DENT,nBalPath==0); m_toolbar.EnableButton(ID_BUTTON_RECT2,nBalPath==1); m_toolbar.EnableButton(ID_BUTTON_CONCAVE,nBalPath==2); m_toolbar.EnableButton(ID_BUTTON_EXTEND,nBalPath==3); m_toolbar.EnableButton(ID_BUTTON_ARBITRARY,nBalPath==4); m_toolbar.EnableButton(ID_BUTTON_SELECT,nBalPath==5); } void CDarwBalconyDlg::SetToolbarBtState2() { m_toolbar.EnableButton(ID_BUTTON_DENT,TRUE); m_toolbar.EnableButton(ID_BUTTON_RECT2,TRUE); m_toolbar.EnableButton(ID_BUTTON_CONCAVE,TRUE); m_toolbar.EnableButton(ID_BUTTON_EXTEND,TRUE); m_toolbar.EnableButton(ID_BUTTON_ARBITRARY,TRUE); m_toolbar.EnableButton(ID_BUTTON_SELECT,TRUE); } void CDarwBalconyDlg::doExtend(XPoint pt) { XPoint ptStart=pt; XPoint ptEnd; while(1) { int nRet1=ads_getpoint(NULL, _T("\n点取墙上另一点<取消>: "), ptEnd); if (nRet1==RTNORM) { PickSet ssEnd(SS_FREE); RBList entmask(RTDXF0,_T("TCH_WALL,TCH_CURTAIN_WALL"),NULL); ssEnd.Get(ptEnd,entmask); if (ssEnd.Length()!=0) break; } else if (nRet1==RTNONE||nRet1==RTCAN) return; } PickSet ssBound(SS_FREE); g_ssPickFirst.Free(); if (SelectEntities(_T("\n请选择邻接的墙(或门窗)<取消>:"), ssBound, RBList(RTDXF0, _T("TCH_WALL,TCH_CURTAIN_WALL,TCH_OPENING"), NULL))!=RTNORM) return; MakeWallSet(ssBound);//add by whl UpdateData(TRUE); XPoly2D polyWall; ptStart=Ucs2Wcs(ptStart); ptEnd=Ucs2Wcs(ptEnd); if (SearchWallSide(ptStart,ptEnd,//世界坐标系下点 ssBound,//传入用户选的墙 polyWall)//返回沿墙polyWall !=TRUE) return; // 确定起点在起始墙的哪侧,也就是求的poly向那侧偏 XPoint pt0=*polyWall[0]; XPoint pt1=*polyWall[1]; XDirectionCurve lineWall; polyWall.Nth(0,lineWall); XCurveSegment cvCenter; PickSet ss(SS_FREE); RBList entmask(RTDXF0,_T("TCH_WALL,TCH_CURTAIN_WALL"),NULL); ss.Get(Wcs2Ucs(XPoint(pt0[0],pt0[1],pt0[2])),entmask); if (ss.Length()==0) return ; Entity entFirst=ss[0L];//起点的墙 //针对起点是几个墙交点的情况 for(long i=0;iStartPoint(),pWall->EndPoint()); cvCenter=pWall->OffsetGeomCenter(); } OPENOBJ_END() cvCenter.SetElevation(0); int nRet=2; nRet=cvCenter.OnWhichSide(ptStart); if (lineWall.GetBulge()>1E-6) { if (nRet==0) m_nSide=OFFSET_LEFT; else if (nRet==1) m_nSide=OFFSET_RIGHT; else return; } else if (lineWall.GetBulge()<-1E-6) { if (nRet==0) m_nSide=OFFSET_RIGHT; else if (nRet==1) m_nSide=OFFSET_LEFT; else return; } else { XLine line(pt0,pt1); XLine line1(lineWall.StartPoint(),lineWall.EndPoint()); XVector3D vt1(line.EndPoint()-line.StartPoint()); XVector3D vt2(line1.EndPoint()-line1.StartPoint()); vt1.Normalize(); vt2.Normalize(); double s=vt1&vt2; if (s>0) { if (nRet==0) m_nSide=OFFSET_LEFT; else if (nRet==1) m_nSide=OFFSET_RIGHT; else return; } else { if (nRet==0) m_nSide=OFFSET_RIGHT; else if (nRet==1) m_nSide=OFFSET_LEFT; else return; } } int nLen=polyWall.Length(); DList lstEdgeIndex; XPoly2D poly(1); XPoly2D poly2d; if (m_nSide==OFFSET_RIGHT) { poly2d=polyWall; TchSubExport::Offset(m_Lenth,poly2d);// [11/12/2007 nsh] } else if (m_nSide==OFFSET_LEFT) { poly2d=polyWall; TchSubExport::Offset(-m_Lenth,poly2d);// [11/12/2007 nsh] } else return; poly2d.Reverse(); for(long j=0;j0)//确保逆时针 poly.Reverse(); for(int n=0; n=0 && !lstEdgeIndex.FindNode(&nEdge, CompareInt)) { lstEdgeIndex.Append(new int(nEdge)); } } poly.SetElevation(m_Elev); TDbBalcony *pBalcony = new TDbBalcony; for(int k=0; kSetRailAt(*lstEdgeIndex[k], FALSE); pBalcony->SetOutline(poly); pBalcony->SetRailWidth(m_Railwidth); pBalcony->SetRailHeight(m_Railheight); if (m_bhasGirder&&m_Girderthick>=m_Slabthick) pBalcony->SetGirderThickness(m_Girderthick); else pBalcony->SetGirderThickness(m_Slabthick); pBalcony->SetSlabThickness(m_Slabthick); pBalcony->SetLayerGround3d(InitLayer(LAY_GROUND)); pBalcony->AddToMSpace(Adesk::kTrue); } void CDarwBalconyDlg::doSelect(Entity& retEnt) { XPoly2D polyRail; XPoly2D poly(1); if (retEnt.Is(_T("LINE")) || retEnt.Is(_T("ARC"))) { XCurveSegment cv(retEnt); polyRail.Reset(); cv.AsPoly2D(polyRail); } else { XPoly2D poly2d(retEnt); if (!!poly2d) { polyRail=poly2d; } else { adsout << _T("\n无效的选择!"); return; } } polyRail.Compress(); DList lstEdgeIndex; if (!polyRail.IsClosed()) { XScreenDc dc0; XScreenDc dc(1,1);// [12/4/2007 nsh] XPoly2D polyTemp(polyRail); polyTemp.TransUCS(Groups(0), Groups(1)); dc0 << polyTemp; XPoly2D polyWall(0); if (SearchBalcony(polyRail, polyWall, poly)!=RTNORM) { ads_redraw(NULL,0); return; } for(int n=0; n=0 && !lstEdgeIndex.FindNode(&nEdge, CompareInt)) { lstEdgeIndex.Append(new int(nEdge)); XCurveSegment seg; poly.Nth(nEdge, seg); seg.StartPoint()=Wcs2Ucs(seg.StartPoint()); seg.EndPoint()=Wcs2Ucs(seg.EndPoint()); dc << seg; } } while(1) { XPushVar tVar(_T("OSMODE"), OS_NEA); XPoint ptEdge; int nRet=ads_getpoint(NULL, _T("\n请点取接墙的边: "), ptEdge); if (nRet==RTNONE) break; else if (nRet==RTCAN) return; UpdateData(TRUE); ptEdge =Ucs2Wcs(ptEdge); int nEdge=FindNearestEdge(poly, ptEdge); if (nEdge>=0 && !lstEdgeIndex.FindNode(&nEdge, CompareInt)) { lstEdgeIndex.Append(new int(nEdge)); XCurveSegment seg; poly.Nth(nEdge, seg); seg.StartPoint()=Wcs2Ucs(seg.StartPoint()); seg.EndPoint()=Wcs2Ucs(seg.EndPoint()); dc << seg; } } } else { poly=polyRail; if (poly.PathArea()>0) //确保逆时针 poly.Reverse(); XScreenDc dc(1,1); while(1) { XPushVar tVar(_T("OSMODE"), OS_NEA); XPoint ptEdge; int nRet=ads_getpoint(NULL, _T("\n请点取接墙的边: "), ptEdge); if (nRet==RTNONE) break; else if (nRet==RTCAN) return; UpdateData(TRUE); ptEdge=Ucs2Wcs(ptEdge); int nEdge=FindNearestEdge(poly, ptEdge); if (nEdge>=0 && !lstEdgeIndex.FindNode(&nEdge, CompareInt)) { lstEdgeIndex.Append(new int(nEdge)); XCurveSegment seg; poly.Nth(nEdge, seg); seg.StartPoint()=Wcs2Ucs(seg.StartPoint()); seg.EndPoint()=Wcs2Ucs(seg.EndPoint()); dc << seg; } } } poly.SetElevation(m_Elev);// [11/12/2007 nsh] TDbBalcony *pBalcony = new TDbBalcony; pBalcony->SetOutline(poly); pBalcony->SetRailWidth(m_Railwidth);// [11/12/2007 nsh] pBalcony->SetRailHeight(m_Railheight);// [11/12/2007 nsh] if (m_bhasGirder&&m_Girderthick>=m_Slabthick) pBalcony->SetGirderThickness(m_Girderthick);// [11/12/2007 nsh] else pBalcony->SetGirderThickness(m_Slabthick);// [11/12/2007 nsh] pBalcony->SetSlabThickness(m_Slabthick);// [11/12/2007 nsh] pBalcony->SetLayerGround3d(InitLayer(LAY_GROUND)); for(int i=0; iSetRailAt(*lstEdgeIndex[i], FALSE); if (!retEnt) ; else retEnt.Erase(); pBalcony->AddToMSpace(Adesk::kTrue); ads_redraw(NULL,0); } BOOL CDarwBalconyDlg::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; UINT nID = (UINT)pNMHDR->idFrom; if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) { return FALSE; } 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; }