void COXToolTipCtrl::DisplayToolTip(CPoint& pt, BOOL bExtended /*= FALSE*/) { ASSERT(::IsWindow(m_hWnd)); if (!m_bActivated || !m_pCurrentToolTip) return; m_bExtended = bExtended; CString str = GetTooltipText(m_pCurrentToolTip); if (str.IsEmpty()) return; //Calculate the width and height of the box dynamically CRect rect = GetBoundsRect(str, m_pCurrentToolTip->nWidth); rect = CalculateInfoBoxRect(pt, m_pCurrentToolTip, rect); ShowWindow(SW_HIDE); SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_SHOWWINDOW|SWP_NOCOPYBITS|SWP_NOACTIVATE|SWP_NOZORDER); // ModifyStyle(0, WS_VISIBLE); // ShowWindow(SW_SHOWNA); }
BOOL CWinXPButtonComp::CreateComponent(Component * _Parent) { SetComponentParent(_Parent); CWinXPButton::Create((HWND)_Parent->GetHandle(),GetBoundsRect(),NULL,get_CtrlWindowStyle(),get_CtrlWindowStyleEx()); SetBkColor(RGB(238,243,250)); GenerateImages(_T(""), IDB_PROPERTYGRID, TRUE); return ::IsWindow(m_hWnd); }
BOOL CFadeStateButtonCtrlComp::CreateComponent(Component * _Parent) { SetComponentParent(_Parent); CFadeStateButtonCtrl::Create((HWND)_Parent->GetHandle(),GetBoundsRect(),NULL,get_CtrlWindowStyle(),get_CtrlWindowStyleEx()); HBITMAP bmp=AtlLoadBitmap(IDB_PROPERTYGRID); SetBitmap(bmp); return ::IsWindow(m_hWnd); }
BOOL CGauge::OnDragStart(int nHitTest,CPointF point) { REAL dx = m_pWnd->GetStartPos().x; REAL dy = m_pWnd->GetStartPos().y; CRectF rc; GetBoundsRect(rc); rc.OffsetRect(-dx,-dy); BOOL bRet = FALSE; CClientDC dc(m_pWnd); CElastic elastic(&dc,this); CPoints pts; switch (nHitTest) { case TopLeft: PointHelper::RecalcPoints(m_rcBounds,CRectF(point.x,point.y,rc.right,rc.bottom),m_pts,pts); break; case Top: PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,point.y,rc.right,rc.bottom),m_pts,pts); break; case TopRight: PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,point.y,point.x,rc.bottom),m_pts,pts); break; case Right: PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,rc.top,point.x,rc.bottom),m_pts,pts); break; case BottomRight: PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,rc.top,point.x,point.y),m_pts,pts); break; case Bottom: PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,rc.top,rc.right,point.y),m_pts,pts); break; case BottomLeft: PointHelper::RecalcPoints(m_rcBounds,CRectF(point.x,rc.top,rc.right,point.y),m_pts,pts); break; case Left: PointHelper::RecalcPoints(m_rcBounds,CRectF(point.x,rc.top,rc.right,rc.bottom),m_pts,pts); break; case Body: PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,rc.top,rc.right,rc.bottom),m_pts,pts); bRet = TRUE; break; default: GetPoints(pts); PointHelper::OffsetPoints(pts,-dx,-dy); pts[nHitTest-HtIndex] = CPoint((int)point.x,(int)point.y); break; } dc.Polyline(pts.GetData(),(int)pts.GetCount()); return bRet; }
BOOL CGauge::OnDragEnd(int nHitTest,CPointF point) { CRectF rc; GetBoundsRect(rc); REAL dx = m_pWnd->GetStartPos().x; REAL dy = m_pWnd->GetStartPos().y; switch (nHitTest) { case TopLeft: rc.left = point.x + dx; rc.top = point.y + dy; break; case Top: rc.top = point.y + dy; break; case TopRight: rc.right = point.x + dx; rc.top = point.y + dy; break; case Right: rc.right = point.x + dx; break; case BottomRight: rc.right = point.x + dx; rc.bottom = point.y + dy; break; case Bottom: rc.bottom = point.y + dy; break; case BottomLeft: rc.left = point.x + dx; rc.bottom = point.y + dy; break; case Left: rc.left = point.x + dx; break; case Body: rc.MoveToXY(rc.left+point.x-m_pWnd->GetMarkPos().x, rc.top+point.y-m_pWnd->GetMarkPos().y); break; default: m_pts[nHitTest-HtIndex] = point + m_pWnd->GetStartPos(); PointHelper::CalcPointsBoundsRect(m_pts,m_rcBounds); FormatDesc(); return TRUE; } SetBoundsRect(rc); FormatDesc(); return TRUE; }
void CGauge::OnDrag(int nHitTest,CPointF point) { CRectF rc; GetBoundsRect(rc); REAL dx = m_pWnd->GetStartPos().x; REAL dy = m_pWnd->GetStartPos().y; rc.OffsetRect(-dx,-dy); CClientDC dc(m_pWnd); CElastic elastic(&dc,this); CPoints pts1,pts2; switch (nHitTest) { case TopLeft: PointHelper::RecalcPoints(m_rcBounds,CRectF(m_pWnd->GetCapturePos().x,m_pWnd->GetCapturePos().y,rc.right,rc.bottom),m_pts,pts1); PointHelper::RecalcPoints(m_rcBounds,CRectF(point.x,point.y,rc.right,rc.bottom),m_pts,pts2); break; case Top: PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,m_pWnd->GetCapturePos().y,rc.right,rc.bottom),m_pts,pts1); PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,point.y,rc.right,rc.bottom),m_pts,pts2); break; case TopRight: PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,m_pWnd->GetCapturePos().y,m_pWnd->GetCapturePos().x,rc.bottom),m_pts,pts1); PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,point.y,point.x,rc.bottom),m_pts,pts2); break; case Right: PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,rc.top,m_pWnd->GetCapturePos().x,rc.bottom),m_pts,pts1); PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,rc.top,point.x,rc.bottom),m_pts,pts2); break; case BottomRight: PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,rc.top,m_pWnd->GetCapturePos().x,m_pWnd->GetCapturePos().y),m_pts,pts1); PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,rc.top,point.x,point.y),m_pts,pts2); break; case Bottom: PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,rc.top,rc.right,m_pWnd->GetCapturePos().y),m_pts,pts1); PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left,rc.top,rc.right,point.y),m_pts,pts2); break; case BottomLeft: PointHelper::RecalcPoints(m_rcBounds,CRectF(m_pWnd->GetCapturePos().x,rc.top,rc.right,m_pWnd->GetCapturePos().y),m_pts,pts1); PointHelper::RecalcPoints(m_rcBounds,CRectF(point.x,rc.top,rc.right,point.y),m_pts,pts2); break; case Left: PointHelper::RecalcPoints(m_rcBounds,CRectF(m_pWnd->GetCapturePos().x,rc.top,rc.right,rc.bottom),m_pts,pts1); PointHelper::RecalcPoints(m_rcBounds,CRectF(point.x,rc.top,rc.right,rc.bottom),m_pts,pts2); break; case Body: { REAL x = m_pWnd->GetCapturePos().x-m_pWnd->GetMarkPos().x; REAL y = m_pWnd->GetCapturePos().y-m_pWnd->GetMarkPos().y; PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left+x,rc.top+y,rc.right+x,rc.bottom+y),m_pts,pts1); x = point.x-m_pWnd->GetMarkPos().x; y = point.y-m_pWnd->GetMarkPos().y; PointHelper::RecalcPoints(m_rcBounds,CRectF(rc.left+x,rc.top+y,rc.right+x,rc.bottom+y),m_pts,pts2); } break; default: { GetPoints(pts1); PointHelper::OffsetPoints(pts1,-dx,-dy); pts1[nHitTest-HtIndex] = CPoint((int)m_pWnd->GetCapturePos().x,(int)m_pWnd->GetCapturePos().y); pts2.Copy(pts1); pts2[nHitTest-HtIndex] = CPoint((int)point.x,(int)point.y); } break; } dc.Polyline(pts1.GetData(),(int)pts1.GetCount()); dc.Polyline(pts2.GetData(),(int)pts2.GetCount()); }
BOOL CToolTipEx::Show(CPoint point) { m_reducedWindowSize = false; if(m_pBitmap) { m_RichEdit.ShowWindow(SW_HIDE); } else { m_RichEdit.ShowWindow(SW_SHOW); } CRect rect; if(CGetSetOptions::GetSizeDescWindowToContent() == FALSE) { rect.left = point.x; rect.top = point.y; CSize size; CGetSetOptions::GetDescWndSize(size); rect.right = rect.left + size.cx; rect.bottom = rect.top + size.cy; EnsureWindowVisible(&rect); } else { rect = GetBoundsRect(); //account for the scroll bars rect.right += 20; rect.bottom += 20; if (m_pBitmap) { int nWidth = CBitmapHelper::GetCBitmapWidth(*m_pBitmap); int nHeight = CBitmapHelper::GetCBitmapHeight(*m_pBitmap); rect.right = rect.left + nWidth; rect.bottom = rect.top + nHeight; } else if(m_csRTF != "") { //if showing rtf then increase the size because //rtf will probably draw bigger long lNewWidth = (long)rect.Width() + (long)(rect.Width() *1.5); rect.right = rect.left + lNewWidth; long lNewHeight = (long)rect.Height() + (long)(rect.Height() *1.5); rect.bottom = rect.top + lNewHeight; } rect.right += CAPTION_BORDER * 2; rect.bottom += CAPTION_BORDER * 2; CRect rcScreen; ClientToScreen(rect); CRect cr(point, point); int nMonitor = GetMonitorFromRect(&cr); GetMonitorRect(nMonitor, &rcScreen); //ensure that we don't go outside the screen if(point.x < 0) { point.x = 5; m_reducedWindowSize = true; } if(point.y < 0) { point.y = 5; m_reducedWindowSize = true; } rcScreen.DeflateRect(0, 0, 5, 5); long lWidth = rect.Width(); long lHeight = rect.Height(); rect.left = point.x; rect.top = point.y; rect.right = rect.left + lWidth; rect.bottom = rect.top + lHeight; if (rect.right > rcScreen.right) { rect.right = rcScreen.right; m_reducedWindowSize = true; } if (rect.bottom > rcScreen.bottom) { rect.bottom = rcScreen.bottom; m_reducedWindowSize = true; } } SetWindowPos(&CWnd::wndTopMost, rect.left, rect.top, rect.Width(), rect.Height (), SWP_SHOWWINDOW | SWP_NOCOPYBITS | SWP_NOACTIVATE | SWP_NOZORDER); return TRUE; }
void KDCAttributes::DumpDC(HDC hDC) { POINT pnt; SIZE size; m_List.DeleteAll(); Add(_T("Technology"), _T("%d"), GetDeviceCaps(hDC, TECHNOLOGY)); Add(_T("width"), _T("%d"), GetDeviceCaps(hDC, HORZRES)); Add(_T("height"), _T("%d"), GetDeviceCaps(hDC, VERTRES)); GetDCOrgEx(hDC, & pnt); Add(_T("DC Origin"), _T("{ %d, %d }"), pnt.x, pnt.y); TCHAR szTitle[MAX_PATH]; szTitle[0] = 0; GetWindowText(WindowFromDC(hDC), szTitle, MAX_PATH); Add(_T("Window"), _T("0x%X \"%s\""), WindowFromDC(hDC), szTitle); Add(_T("Bitmap"), _T("0x%X"), GetCurrentObject(hDC, OBJ_BITMAP)); Add(_T("Graphics Mode"), _T("%d"), GetGraphicsMode(hDC)); Add(_T("Mapping Mode"), _T("%d"), GetMapMode(hDC)); GetViewportExtEx(hDC, & size); Add(_T("Viewport Extent"), _T("{ %d, %d }"), size.cx, size.cy); GetViewportOrgEx(hDC, & pnt); Add(_T("Viewport Origin"), _T("{ %d, %d }"), pnt.x, pnt.y); GetWindowExtEx(hDC, & size); Add(_T("Window Extent"), _T("{ %d, %d }"), size.cx, size.cy); GetWindowOrgEx(hDC, & pnt); Add(_T("Window Origin"), _T("{ %d, %d }"), pnt.x, pnt.y); XFORM xform; GetWorldTransform(hDC, & xform); Add(_T("World transformation"), _T("{ %f, %f, %f, %f, %f, %f }"), xform.eM11, xform.eM12, xform.eM21, xform.eM22, xform.eDx, xform.eDy); // transformation Add(_T("Background Color"), _T("0x%X"), GetBkColor(hDC)); Add(_T("Text Color"), _T("0x%X"), GetTextColor(hDC)); Add(_T("Palette"), _T("0x%X"), GetCurrentObject(hDC, OBJ_PAL)); { COLORADJUSTMENT ca; GetColorAdjustment(hDC, & ca); Add(_T("Color Adjustment"), _T("{ %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d }"), ca.caSize, ca.caFlags, ca.caIlluminantIndex, ca.caRedGamma, ca.caGreenGamma, ca.caBlueGamma, ca.caReferenceBlack, ca.caReferenceWhite, ca.caContrast, ca.caBrightness, ca.caColorfulness, ca.caRedGreenTint); } Add(_T("Color Space"), _T("0x%X"), GetColorSpace(hDC)); Add(_T("ICM Mode"), _T("%d"), SetICMMode(hDC, ICM_QUERY)); { TCHAR szProfile[MAX_PATH]; DWORD dwSize = MAX_PATH; szProfile[0] = 0; GetICMProfile(hDC, & dwSize, szProfile); Add(_T("ICM Profile"), _T("%s"), szProfile); } GetCurrentPositionEx(hDC, & pnt); Add(_T("Current Position"), _T("{ %d, %d }"), pnt.x, pnt.y); Add(_T("ROP2"), _T("%d"), GetROP2(hDC)); Add(_T("Background Mode"), _T("%d"), GetBkMode(hDC)); Add(_T("Logical Pen"), _T("0x%X"), GetCurrentObject(hDC, OBJ_PEN)); Add(_T("DC Pen Color"), _T("0x%X"), GetDCPenColor(hDC)); Add(_T("Arc Direction"), _T("%d"), GetArcDirection(hDC)); FLOAT miter; GetMiterLimit(hDC, & miter); Add(_T("Miter Limit"), _T("%f"), miter); Add(_T("Logical Brush"), _T("0x%X"), GetCurrentObject(hDC, OBJ_BRUSH)); Add(_T("DC Brush Color"), _T("0x%X"), GetDCBrushColor(hDC)); GetBrushOrgEx(hDC, & pnt); Add(_T("Brush Origin"), _T("{ %d, %d }"), pnt.x, pnt.y); Add(_T("Polygon Filling Mode"), _T("%d"), GetPolyFillMode(hDC)); Add(_T("Bitmap Stretching Mode"), _T("%d"), GetStretchBltMode(hDC)); Add(_T("Logical Font"), _T("0x%X"), GetCurrentObject(hDC, OBJ_FONT)); Add(_T("Inter-character spacing"), _T("%d"), GetTextCharacterExtra(hDC)); DWORD flag = SetMapperFlags(hDC, 0); SetMapperFlags(hDC, flag); Add(_T("Font Mapper Flags"), _T("0x%X"), flag); Add(_T("Text Alignment"), _T("0x%X"), GetTextAlign(hDC)); Add(_T("Text Justification"), _T("write only"), 0); Add(_T("Layout"), _T("%d"), GetLayout(hDC)); Add(_T("Path"), _T("%d bytes"), GetPath(hDC, NULL, NULL, 0)); RECT rect; int typ = GetClipBox(hDC, & rect); HRGN hRgn = CreateRectRgn(0, 0, 1, 1); GetClipRgn(hDC, hRgn); Add(_T("Clipping"), _T("type %d clip box { %d, %d, %d, %d } size %d bytes"), typ, rect.left, rect.top, rect.right, rect.bottom, GetRegionData(hRgn, 0, NULL) ); GetMetaRgn(hDC, hRgn); GetRgnBox(hRgn, & rect); Add(_T("Meta Region"), _T("size %d bytes, rgn box { %d, %d, %d, %d }"), GetRegionData(hRgn, 0, NULL), rect.left, rect.top, rect.right, rect.bottom); for (int i=1; i<=5; i++) { int rslt = GetRandomRgn(hDC, hRgn, i); if ( rslt==1 ) { GetRgnBox(hRgn, & rect); Add(_T("Random Region"), _T("size %d bytes, rgn box { %d, %d, %d, %d }"), GetRegionData(hRgn, 0, NULL), rect.left, rect.top, rect.right, rect.bottom); } else if ( rslt==0 ) Add(_T("Random Region"), _T("NULL"), 0); else Add(_T("Random Region"), _T("FAIL"), 0); } DeleteObject(hRgn); GetBoundsRect(hDC, & rect, 0); Add(_T("Bounds Rectangle"), _T("{ %d, %d, %d, %d }"), rect.left, rect.top, rect.right, rect.bottom); }
int CTrackContrl::Track( const CPoint & point, UINT nFlags /* = 0 */,BOOL bTrackRubberBand /* = TRUE */ ) { ASSERT(m_pwndParent != NULL); CRect InitialBoundRect; int pX, pY; if(nFlags == MK_LBUTTON || nFlags== (MK_LBUTTON | MK_CONTROL) || nFlags==(MK_LBUTTON | MK_SHIFT)) { for(int i=0;i<m_selTrackerAll.GetSize();i++) { int Hit=m_selTrackerAll[i]->HitTest(point);//判断用户是否抓住了一个handle if(m_selTrackerAll[i]->GetCtrWindowIsable()) { return TRACK_CTR_ABLE; } if(Hit!=CRectTracker::hitNothing) { //判断ctrl按下 if( ( nFlags & MK_CONTROL ) != 0 ) { Toggle( m_selTrackerAll[i] ); return TRACK_CTR_CTRL; } //shift if( ( nFlags & MK_SHIFT ) != 0 ) { Select( m_selTrackerAll[i] ); return TRACK_CTR_SHIFT; } //没有ctrl shift时 这个控件被按下 if(!IsSelected(m_selTrackerAll[i]))//在选中数组检测这个控件是否已经选中了 DeSelectAll();//删除数组中所有选中 Select( m_selTrackerAll[i] );//选中当前控件 InitialBoundRect = GetBoundsRect();//获取没有移动前的CRect ///////把没有移动前的Rect赋给当前TrackContrl的Rect m_rect.CopyRect( & InitialBoundRect ); if(Hit == CRectTracker::hitMiddle)//用户抓住中间参见MSDN CRectTracker::HitTest { CRectTracker::Track( m_pwndParent, point);//用户跟踪鼠标位置,并保存在m_rect中 pX = InitialBoundRect.left - m_rect.left; pY = InitialBoundRect.top - m_rect.top; // 把控件移动到鼠标位置 for( int j = 0; j < m_selectRectTracker.GetSize(); j++ ) { //鼠标左键选中的控件 int Hit=m_selectRectTracker[j]->HitTest(point); if(!m_selectRectTracker[j]->GetCtrWindowIsable() && Hit != CRectTracker::hitNothing) { m_pRightBnSelect = m_selectRectTracker[j]; } ///////////////////////////////////////// //////////////////////////////移动 CRect rect; rect.left = m_selectRectTracker[j]->m_rect.left - pX; rect.right = m_selectRectTracker[j]->m_rect.right - pX; rect.top = m_selectRectTracker[j]->m_rect.top - pY; rect.bottom = m_selectRectTracker[j]->m_rect.bottom - pY; //和最大矩形对比 ReAdjustMaxRect(rect,TRUE); m_selectRectTracker[j]->SetRect(rect); ///////////////////////////////重画 ReDrawRect(m_selectRectTracker[j]->m_rect,m_selectRectTracker[j]->m_nHandleSize); } /////重画Old区域 ReDrawRect(InitialBoundRect,m_selTrackerAll[0]->m_nHandleSize); } else { /////////////////////////拉大,拉小 m_selTrackerAll[i]->Track( m_pwndParent, point ); /////////////////////////跟最大矩形做对比 ReAdjustMaxRect(m_selTrackerAll[i]->m_rect); m_selTrackerAll[i]->SetRect(m_selTrackerAll[i]->m_rect); ///////重画 ReDrawRect(m_selTrackerAll[i]->m_rect,m_selTrackerAll[i]->m_nHandleSize); ReDrawRect(InitialBoundRect,m_selTrackerAll[i]->m_nHandleSize); } return TRACK_CTR_MIDORHANDLE; } } //用户鼠标没有抓住任何控件的handle DeSelectAll();//删除保存的所有选中按钮 //参数bTrackRubberBand用于是否画虚线框区域,参见TrackRubberBand函数, //即windows中用于选择区域的虚线框如在桌面上可以拖动一个虚线框选中n个图标 if(!bTrackRubberBand) { m_pwndParent->Invalidate(); return TRACK_CTR_RUBBERBAND; } TrackRubberBand( m_pwndParent, point ); // TrackRubberBand显示橡皮筋层(Windows中用于选择的虚线框), // 该函数一般在处理WM_LBUTTONDOWN消息的函数中被调用, // 函数中第一个参数是拥有橡皮筋长方形的窗体指针,第二个参数是点的坐标, // 第三个参数用于控制是否允许反向选择,即从右下角到左上角进行选择。 m_rect.NormalizeRect();//一个正数的矩形,如果从下往上化矩形框,函数将交换top和bottom //同理,从右忘左画时交换left和right CRect temp; for(int k=0;k<m_selTrackerAll.GetSize();k++) { //intersectRect计算两个矩形的交集 temp.IntersectRect(&m_rect,&m_selTrackerAll[k]->m_rect); //交集区域矩形等于控件矩形,选中 // if(temp.EqualRect(&m_selTrackerAll[k]->m_rect)) // Select(m_selTrackerAll[k]); if(!temp.IsRectEmpty())//如果交集区域不为空就选中 Select(m_selTrackerAll[k]); } return TRACK_CTR_LBUTTON; } else if(nFlags & MK_RBUTTON) { int flag = TRACK_CTR_OTHER; for(int i=0;i<m_selTrackerAll.GetSize();i++) { int Hit=m_selTrackerAll[i]->HitTest(point);//判断用户是否抓住了一个handle if(m_selTrackerAll[i]->GetCtrWindowIsable()) { flag = TRACK_CTR_ABLE; return flag; } if(Hit != CRectTracker::hitNothing) { if(!IsSelected(m_selTrackerAll[i]))//在选中数组检测这个控件是否已经选中了 DeSelectAll();//删除数组中所有选中 Select( m_selTrackerAll[i] );//选中当前控件 m_pRightBnSelect = m_selTrackerAll[i]; flag = TRACK_CTR_RBUTTON; } } return flag; } else { return TRACK_CTR_OTHER; } }
BOOL CHotKeyCtrl::CreateComponent(Component * _Parent) { SetComponentParent(_Parent); CWindowImpl<StdCtrl::CHotKeyCtrl,WTL::CHotKeyCtrl>::Create((HWND)_Parent->GetHandle(),GetBoundsRect(),NULL,get_InternalWindowStyle(),get_InternalWindowStyleEx()); return ::IsWindow(m_hWnd); }