VC之按钮控件位置大小界面设置
来源:互联网 发布:java float 相等 编辑:程序博客网 时间:2024/05/17 03:16
本文简单介绍下按钮控件的位置大小和界面设置。
首先,新建一个对话框应用程序,并且在界面上添加几个按钮
然后,设置贴图按钮的属性
添加图片资源
将第一个图片加载到程序资源中,第二个图片放在资源文件夹中
接着,添加按钮相关变量
CButtonSTm_btn5;CBitmapButtonm_btn4;CBitmapButtonm_btn3;
然后处理
void CButtonUiDlg::SetButtonUI(){//button1 do nothing//button2 set size and positionRECT clientRect;clientRect.left = 200;clientRect.top = 100;clientRect.right = clientRect.left + 100;clientRect.bottom = clientRect.top + 100;GetDlgItem(IDC_BUTTON2)->MoveWindow(&clientRect);//button3 set background get from resourcem_btn3.LoadBitmaps(IDB_BITMAP1);//button4 set background get from file pictureCString sCurrentPath = "";char Path[270];DWORD len = 0;DWORD i = 0;len = GetCurrentDirectory(270,Path);for(i=0;i<len;i++){sCurrentPath = sCurrentPath + CString(Path[i]);}sCurrentPath = sCurrentPath + "/res";CString sFilePathName = sCurrentPath + "/bg2.bmp";m_btn4.LoadBitmaps(sFilePathName);//button5 set background from classm_btn5.SetBtnCursor();m_btn5.SetIcon(m_hIcon);m_btn5.SetTooltipText(&sFilePathName);}
运行程序,查看效果
其中,按钮5使用的类CButtonST来源于网络,附件如下
头文件
////Class:CButtonST////Compiler:Visual C++//Tested on:Visual C++ 5.0////Version:See GetVersionC() or GetVersionI()////Created:xx/xxxx/1998//Updated:19/September/1999////Author:Davide Calabro'davide_calabro@yahoo.com//#ifndef _BTNST_H#define _BTNST_H#if _MSC_VER >= 1000#pragma once#endif // _MSC_VER >= 1000// CBtnST.h : header file//// Comment this if you don't want that CButtonST hilights itself// also when the window is inactive (like happens in Internet Explorer)//#define ST_LIKEIE// Comment this if you don't want to use CMemDC class//#define ST_USE_MEMDC/////////////////////////////////////////////////////////////////////////////// CButtonST windowclass CButtonST : public CButton{// Constructionpublic: CButtonST();~CButtonST(); enum {ST_ALIGN_HORIZ, ST_ALIGN_VERT, ST_ALIGN_HORIZ_RIGHT};// Attributespublic:// Operationspublic:// Overrides// ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CButtonST)public:virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);virtual BOOL PreTranslateMessage(MSG* pMsg);protected:virtual void PreSubclassWindow();virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);//}}AFX_VIRTUAL// Implementationpublic:void DrawTransparent(BOOL bRepaint = FALSE);BOOL GetDefault();void SetTooltipText(int nId, BOOL bActivate = TRUE);void SetTooltipText(CString* spText, BOOL bActivate = TRUE);void ActivateTooltip(BOOL bEnable = TRUE);BOOL SetBtnCursor(int nCursorId = -1);void SetFlatFocus(BOOL bDrawFlatFocus, BOOL bRepaint = FALSE);BOOL GetFlatFocus();void SetDefaultActiveFgColor(BOOL bRepaint = FALSE);void SetActiveFgColor(COLORREF crNew, BOOL bRepaint = FALSE);const COLORREF GetActiveFgColor();void SetDefaultActiveBgColor(BOOL bRepaint = FALSE);void SetActiveBgColor(COLORREF crNew, BOOL bRepaint = FALSE);const COLORREF GetActiveBgColor();void SetDefaultInactiveFgColor(BOOL bRepaint = FALSE);void SetInactiveFgColor(COLORREF crNew, BOOL bRepaint = FALSE);const COLORREF GetInactiveFgColor();void SetDefaultInactiveBgColor(BOOL bRepaint = FALSE);void SetInactiveBgColor(COLORREF crNew, BOOL bRepaint = FALSE);const COLORREF GetInactiveBgColor();void SetShowText(BOOL bShow = TRUE);BOOL GetShowText();void SetAlign(int nAlign);int GetAlign();void SetFlat(BOOL bState = TRUE);BOOL GetFlat();void DrawBorder(BOOL bEnable = TRUE);void SetIcon(int nIconInId, int nIconOutId = NULL);void SetIcon(HICON hIconIn, HICON hIconOut = NULL);static const short GetVersionI();static const char* GetVersionC();protected: //{{AFX_MSG(CButtonST)afx_msg void OnCaptureChanged(CWnd *pWnd);afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);afx_msg void OnKillFocus(CWnd* pNewWnd);afx_msg void OnMouseMove(UINT nFlags, CPoint point);afx_msg void OnSysColorChange();//}}AFX_MSGafx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);DECLARE_MESSAGE_MAP()private:void DrawTheIcon(CDC* pDC, CString* title, RECT* rcItem, CRect* captionRect, BOOL IsPressed, BOOL IsDisabled);void InitToolTip();void PaintBk(CDC* pDC);int m_nAlign;BOOL m_bShowText;BOOL m_bDrawBorder;BOOL m_bIsFlat;BOOL m_MouseOnButton;BOOL m_bDrawFlatFocus;HCURSOR m_hCursor;CToolTipCtrl m_ToolTip;HICON m_hIconIn;HICON m_hIconOut;BYTE m_cyIcon;BYTE m_cxIcon;CDC m_dcBk;CBitmap m_bmpBk;CBitmap* m_pbmpOldBk;BOOL m_bDrawTransparent;BOOL m_bIsDefault;COLORREF m_crInactiveBg; COLORREF m_crInactiveFg; COLORREF m_crActiveBg; COLORREF m_crActiveFg;};#ifdef ST_USE_MEMDC//////////////////////////////////////////////////// CMemDC - memory DC//// Author: Keith Rule// Email: keithr@europa.com// Copyright 1996-1997, Keith Rule//// You may freely use or modify this code provided this// Copyright is included in all derived versions.//// History - 10/3/97 Fixed scrolling bug.// Added print support.// 25 feb 98 - fixed minor assertion bug//// This class implements a memory Device Contextclass CMemDC : public CDC{public: // constructor sets up the memory DC CMemDC(CDC* pDC) : CDC() { ASSERT(pDC != NULL); m_pDC = pDC; m_pOldBitmap = NULL; m_bMemDC = !pDC->IsPrinting(); if (m_bMemDC) // Create a Memory DC { pDC->GetClipBox(&m_rect); CreateCompatibleDC(pDC); m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height()); m_pOldBitmap = SelectObject(&m_bitmap); SetWindowOrg(m_rect.left, m_rect.top); } else // Make a copy of the relevent parts of the current DC for printing { m_bPrinting = pDC->m_bPrinting; m_hDC = pDC->m_hDC; m_hAttribDC = pDC->m_hAttribDC; } } // Destructor copies the contents of the mem DC to the original DC ~CMemDC() { if (m_bMemDC) { // Copy the offscreen bitmap onto the screen. m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(), this, m_rect.left, m_rect.top, SRCCOPY); //Swap back the original bitmap. SelectObject(m_pOldBitmap); } else { // All we need to do is replace the DC with an illegal value, // this keeps us from accidently deleting the handles associated with // the CDC that was passed to the constructor. m_hDC = m_hAttribDC = NULL; } } // Allow usage as a pointer CMemDC* operator->() {return this;} // Allow usage as a pointer operator CMemDC*() {return this;}private: CBitmap m_bitmap; // Offscreen bitmap CBitmap* m_pOldBitmap; // bitmap originally found in CMemDC CDC* m_pDC; // Saves CDC passed in constructor CRect m_rect; // Rectangle of drawing area. BOOL m_bMemDC; // TRUE if CDC really is a Memory DC.};#endif///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}// Microsoft Developer Studio will insert additional declarations immediately before the previous line.#endif
源文件
#include "stdafx.h"#include "BtnST.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CButtonSTCButtonST::CButtonST(){m_MouseOnButton = FALSE;m_hIconIn = NULL;m_hIconOut = NULL;m_cxIcon = 0;m_cyIcon = 0;m_hCursor = NULL; // Default type is "flat" buttonm_bIsFlat = TRUE; // By default draw border in "flat" button m_bDrawBorder = TRUE; // By default icon is aligned horizontallym_nAlign = ST_ALIGN_HORIZ; // By default show the text buttonm_bShowText = TRUE; // By default, for "flat" button, don't draw the focus rectm_bDrawFlatFocus = FALSE;// By default the button is not the default buttonm_bIsDefault = FALSE;SetDefaultInactiveBgColor();SetDefaultInactiveFgColor();SetDefaultActiveBgColor();SetDefaultActiveFgColor();// No tooltip createdm_ToolTip.m_hWnd = NULL;// Do not draw as a transparent buttonm_bDrawTransparent = FALSE;m_pbmpOldBk = NULL;} // End of CButtonSTCButtonST::~CButtonST(){// Restore old bitmap (if any)if (m_dcBk.m_hDC != NULL && m_pbmpOldBk != NULL){m_dcBk.SelectObject(m_pbmpOldBk);}// Destroy the icons (if any)// Note: the following two lines MUST be here! even if// BoundChecker says they are unnecessary!if (m_hIconIn != NULL) ::DestroyIcon(m_hIconIn);if (m_hIconOut != NULL) ::DestroyIcon(m_hIconOut);// Destroy the cursor (if any)if (m_hCursor != NULL) ::DestroyCursor(m_hCursor);} // End of ~CButtonSTBEGIN_MESSAGE_MAP(CButtonST, CButton) //{{AFX_MSG_MAP(CButtonST)ON_WM_CAPTURECHANGED()ON_WM_SETCURSOR()ON_WM_KILLFOCUS()ON_WM_MOUSEMOVE()ON_WM_CTLCOLOR_REFLECT()ON_WM_SYSCOLORCHANGE()//}}AFX_MSG_MAPEND_MESSAGE_MAP()void CButtonST::SetIcon(int nIconInId, int nIconOutId){HICON hIconIn;HICON hIconOut;HINSTANCE hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nIconInId), RT_GROUP_ICON);// Set icon when the mouse is IN the buttonhIconIn = (HICON)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nIconInId), IMAGE_ICON, 0, 0, 0); // Set icon when the mouse is OUT the buttonhIconOut = (nIconOutId == NULL) ? NULL : (HICON)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nIconOutId), IMAGE_ICON, 0, 0, 0);SetIcon(hIconIn, hIconOut);/*// Note: the following two lines MUST be here! even if// BoundChecker says they are unnecessary!if (m_hIconIn != NULL) ::DestroyIcon(m_hIconIn);if (m_hIconOut != NULL) ::DestroyIcon(m_hIconOut);// Set icon when the mouse is IN the buttonm_hIconIn = (HICON)::LoadImage(hInstResource, MAKEINTRESOURCE(nIconInId), IMAGE_ICON, 0, 0, 0); // Set icon when the mouse is OUT the buttonm_hIconOut = (nIconOutId == NULL) ? m_hIconIn : (HICON)::LoadImage(hInstResource, MAKEINTRESOURCE(nIconOutId), IMAGE_ICON, 0, 0, 0); ICONINFO ii;// Get icon dimensionZeroMemory(&ii, sizeof(ICONINFO));::GetIconInfo(m_hIconIn, &ii);m_cxIcon = (BYTE)(ii.xHotspot * 2);m_cyIcon = (BYTE)(ii.yHotspot * 2); ::DeleteObject(ii.hbmMask);::DeleteObject(ii.hbmColor);RedrawWindow();*/} // End of SetIconvoid CButtonST::SetIcon(HICON hIconIn, HICON hIconOut){// Note: the following two lines MUST be here! even if// BoundChecker says they are unnecessary!if (m_hIconIn != NULL) ::DestroyIcon(m_hIconIn);if (m_hIconOut != NULL) ::DestroyIcon(m_hIconOut);// Set icon when the mouse is IN the buttonm_hIconIn = hIconIn;// Set icon when the mouse is OUT the buttonm_hIconOut = (hIconOut == NULL) ? m_hIconIn : hIconOut; ICONINFO ii;// Get icon dimensionZeroMemory(&ii, sizeof(ICONINFO));::GetIconInfo(m_hIconIn, &ii);m_cxIcon = (BYTE)(ii.xHotspot * 2);m_cyIcon = (BYTE)(ii.yHotspot * 2); ::DeleteObject(ii.hbmMask);::DeleteObject(ii.hbmColor);RedrawWindow();} // End of SetIconBOOL CButtonST::SetBtnCursor(int nCursorId){HINSTANCE hInstResource;// Destroy any previous cursorif (m_hCursor != NULL) ::DestroyCursor(m_hCursor);m_hCursor = NULL;// If we want a cursorif (nCursorId != -1){hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nCursorId),RT_GROUP_CURSOR);// Load icon resourcem_hCursor = (HCURSOR)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nCursorId), IMAGE_CURSOR, 0, 0, 0);// If something wrong then return FALSEif (m_hCursor == NULL) return FALSE;}return TRUE;} // End of SetBtnCursorvoid CButtonST::SetFlat(BOOL bState){ m_bIsFlat = bState; Invalidate();} // End of SetFlatBOOL CButtonST::GetFlat(){ return m_bIsFlat;} // End of GetFlatvoid CButtonST::SetAlign(int nAlign){ switch (nAlign) { case ST_ALIGN_HORIZ: m_nAlign = ST_ALIGN_HORIZ; break; case ST_ALIGN_HORIZ_RIGHT: m_nAlign = ST_ALIGN_HORIZ_RIGHT; break; case ST_ALIGN_VERT: m_nAlign = ST_ALIGN_VERT; break; } Invalidate();} // End of SetAlignint CButtonST::GetAlign(){ return m_nAlign;} // End of GetAlignvoid CButtonST::DrawBorder(BOOL bEnable){ m_bDrawBorder = bEnable;} // End of DrawBorderconst char* CButtonST::GetVersionC(){ return "2.6";} // End of GetVersionCconst short CButtonST::GetVersionI(){ return 26; // Divide by 10 to get actual version} // End of GetVersionIvoid CButtonST::SetShowText(BOOL bShow){ m_bShowText = bShow; Invalidate();} // End of SetShowTextBOOL CButtonST::GetShowText(){ return m_bShowText;} // End of GetShowTextvoid CButtonST::OnMouseMove(UINT nFlags, CPoint point){CWnd* pWnd; // Finestra attivaCWnd* pParent; // Finestra che contiene il bottoneCButton::OnMouseMove(nFlags, point);// If the mouse enter the button with the left button pressed// then do nothingif (nFlags & MK_LBUTTON && m_MouseOnButton == FALSE) return;// If our button is not flat then do nothingif (m_bIsFlat == FALSE) return;pWnd = GetActiveWindow();pParent = GetOwner();if ((GetCapture() != this) && (#ifndef ST_LIKEIEpWnd != NULL && #endifpParent != NULL)) {m_MouseOnButton = TRUE;//SetFocus();// Thanks Ralph!SetCapture();Invalidate();}else{/*CRect rc;GetClientRect(&rc);if (!rc.PtInRect(point)){*/POINT p2 = point;ClientToScreen(&p2);CWnd* wndUnderMouse = WindowFromPoint(p2);//if (wndUnderMouse != this)if (wndUnderMouse && wndUnderMouse->m_hWnd != this->m_hWnd){// Redraw only if mouse goes outif (m_MouseOnButton == TRUE){m_MouseOnButton = FALSE;Invalidate();}// If user is NOT pressing left button then release capture!if (!(nFlags & MK_LBUTTON)) ReleaseCapture();}}} // End of OnMouseMovevoid CButtonST::OnKillFocus(CWnd * pNewWnd){ CButton::OnKillFocus(pNewWnd); // If our button is not flat then do nothing if (m_bIsFlat == FALSE) return; if (m_MouseOnButton == TRUE) { m_MouseOnButton = FALSE; Invalidate(); }} // End of OnKillFocusvoid CButtonST::OnCaptureChanged(CWnd *pWnd) {if (m_MouseOnButton == TRUE){ReleaseCapture();Invalidate();}// Call base message handlerCButton::OnCaptureChanged(pWnd);} // End of OnCaptureChangedvoid CButtonST::DrawItem(LPDRAWITEMSTRUCT lpDIS){#ifdef ST_USE_MEMDC CDC *pdrawDC = CDC::FromHandle(lpDIS->hDC); CMemDC memDC(pdrawDC); CDC *pDC = &memDC;#else CDC* pDC = CDC::FromHandle(lpDIS->hDC);#endif CPen *pOldPen; BOOL bIsPressed = (lpDIS->itemState & ODS_SELECTED); BOOL bIsFocused = (lpDIS->itemState & ODS_FOCUS); BOOL bIsDisabled = (lpDIS->itemState & ODS_DISABLED); CRect itemRect = lpDIS->rcItem; pDC->SetBkMode(TRANSPARENT); if (m_bIsFlat == FALSE) { if (bIsFocused || (GetDefault() == TRUE)) { CBrush br(RGB(0,0,0)); pDC->FrameRect(&itemRect, &br); itemRect.DeflateRect(1, 1); } } // Prepare draw... paint button's area with background color COLORREF bgColor; if ((m_MouseOnButton == TRUE) || (bIsPressed)) bgColor = GetActiveBgColor(); else bgColor = GetInactiveBgColor();CBrush br(bgColor);// Draw transparent?if (m_bDrawTransparent == TRUE){PaintBk(pDC);}else{pDC->FillRect(&itemRect, &br);}// Disegno lo sfondo del bottone//CBrush br(GetSysColor(COLOR_BTNFACE)); //pDC->FillRect(&itemRect, &br); // Draw pressed button if (bIsPressed) { if (m_bIsFlat == TRUE) { if (m_bDrawBorder == TRUE) { pDC->Draw3dRect(itemRect, ::GetSysColor(COLOR_BTNSHADOW), ::GetSysColor(COLOR_BTNHILIGHT));/* CPen penBtnHiLight(PS_SOLID, 0, GetSysColor(COLOR_BTNHILIGHT)); // Bianco CPen penBtnShadow(PS_SOLID, 0, GetSysColor(COLOR_BTNSHADOW)); // Grigio scuro // Disegno i bordi a sinistra e in alto // Dark gray line pOldPen = pDC->SelectObject(&penBtnShadow); pDC->MoveTo(itemRect.left, itemRect.bottom-1); pDC->LineTo(itemRect.left, itemRect.top); pDC->LineTo(itemRect.right, itemRect.top); // Disegno i bordi a destra e in basso // White line pDC->SelectObject(penBtnHiLight); pDC->MoveTo(itemRect.left, itemRect.bottom-1); pDC->LineTo(itemRect.right-1, itemRect.bottom-1); pDC->LineTo(itemRect.right-1, itemRect.top-1); // pDC->SelectObject(pOldPen);*/ } } else { CBrush brBtnShadow(GetSysColor(COLOR_BTNSHADOW)); pDC->FrameRect(&itemRect, &brBtnShadow); } } else // ...else draw non pressed button { CPen penBtnHiLight(PS_SOLID, 0, GetSysColor(COLOR_BTNHILIGHT)); // White CPen pen3DLight(PS_SOLID, 0, GetSysColor(COLOR_3DLIGHT)); // Light gray CPen penBtnShadow(PS_SOLID, 0, GetSysColor(COLOR_BTNSHADOW)); // Dark gray CPen pen3DDKShadow(PS_SOLID, 0, GetSysColor(COLOR_3DDKSHADOW)); // Black if (m_bIsFlat == TRUE) { if (m_MouseOnButton == TRUE && m_bDrawBorder == TRUE) { pDC->Draw3dRect(itemRect, ::GetSysColor(COLOR_BTNHILIGHT), ::GetSysColor(COLOR_BTNSHADOW));/* // Disegno i bordi a sinistra e in alto // White line pOldPen = pDC->SelectObject(&penBtnHiLight); pDC->MoveTo(itemRect.left, itemRect.bottom-1); pDC->LineTo(itemRect.left, itemRect.top); pDC->LineTo(itemRect.right, itemRect.top); // Disegno i bordi a destra e in basso // Dark gray line pDC->SelectObject(penBtnShadow); pDC->MoveTo(itemRect.left, itemRect.bottom-1); pDC->LineTo(itemRect.right-1, itemRect.bottom-1); pDC->LineTo(itemRect.right-1, itemRect.top-1); // pDC->SelectObject(pOldPen);*/ } } else { // Disegno i bordi a sinistra e in alto // White line pOldPen = pDC->SelectObject(&penBtnHiLight); pDC->MoveTo(itemRect.left, itemRect.bottom-1); pDC->LineTo(itemRect.left, itemRect.top); pDC->LineTo(itemRect.right, itemRect.top); // Light gray line pDC->SelectObject(pen3DLight); pDC->MoveTo(itemRect.left+1, itemRect.bottom-1); pDC->LineTo(itemRect.left+1, itemRect.top+1); pDC->LineTo(itemRect.right, itemRect.top+1); // Disegno i bordi a destra e in basso // Black line pDC->SelectObject(pen3DDKShadow); pDC->MoveTo(itemRect.left, itemRect.bottom-1); pDC->LineTo(itemRect.right-1, itemRect.bottom-1); pDC->LineTo(itemRect.right-1, itemRect.top-1); // Dark gray line pDC->SelectObject(penBtnShadow); pDC->MoveTo(itemRect.left+1, itemRect.bottom-2); pDC->LineTo(itemRect.right-2, itemRect.bottom-2); pDC->LineTo(itemRect.right-2, itemRect.top); // pDC->SelectObject(pOldPen); } } // Read the button's title CString sTitle; GetWindowText(sTitle); // If we don't want the title displayed if (m_bShowText == FALSE) sTitle.Empty(); CRect captionRect = lpDIS->rcItem; // Draw the icon if (m_hIconIn != NULL) { DrawTheIcon(pDC, &sTitle, &lpDIS->rcItem, &captionRect, bIsPressed, bIsDisabled); } // Write the button title (if any) if (sTitle.IsEmpty() == FALSE) { // Disegno la caption del bottone // Se il bottone e' premuto muovo la captionRect di conseguenza if (bIsPressed) captionRect.OffsetRect(1, 1); // ONLY FOR DEBUG // Evidenzia il rettangolo in cui verra' centrata la caption //CBrush brBtnShadow(RGB(255, 0, 0)); //pDC->FrameRect(&captionRect, &brBtnShadow);#ifdef ST_USE_MEMDC// Get dialog's font CFont *pCurrentFont = GetFont(); CFont *pOldFont = pDC->SelectObject(pCurrentFont);#endif if ((m_MouseOnButton == TRUE) || (bIsPressed)) { pDC->SetTextColor(GetActiveFgColor()); pDC->SetBkColor(GetActiveBgColor()); } else { pDC->SetTextColor(GetInactiveFgColor()); pDC->SetBkColor(GetInactiveBgColor()); } // Center text CRect centerRect = captionRect; pDC->DrawText(sTitle, -1, captionRect, DT_SINGLELINE|DT_CALCRECT); captionRect.OffsetRect((centerRect.Width() - captionRect.Width())/2, (centerRect.Height() - captionRect.Height())/2);/* RFU captionRect.OffsetRect(0, (centerRect.Height() - captionRect.Height())/2); captionRect.OffsetRect((centerRect.Width() - captionRect.Width())-4, (centerRect.Height() - captionRect.Height())/2);*/pDC->SetBkMode(TRANSPARENT); pDC->DrawState(captionRect.TopLeft(), captionRect.Size(), (LPCTSTR)sTitle, (bIsDisabled ? DSS_DISABLED : DSS_NORMAL), TRUE, 0, (CBrush*)NULL);#ifdef ST_USE_MEMDC pDC->SelectObject(pOldFont);#endif } if (m_bIsFlat == FALSE || (m_bIsFlat == TRUE && m_bDrawFlatFocus == TRUE)) { // Draw the focus rect if (bIsFocused) { CRect focusRect = itemRect; focusRect.DeflateRect(3, 3); pDC->DrawFocusRect(&focusRect); } }} // End of DrawItemvoid CButtonST::DrawTheIcon(CDC* pDC, CString* title, RECT* rcItem, CRect* captionRect, BOOL IsPressed, BOOL IsDisabled){CRect iconRect = rcItem;CRect btnRect; switch (m_nAlign) { case ST_ALIGN_HORIZ: if (title->IsEmpty()) { // Center the icon horizontally iconRect.left += ((iconRect.Width() - m_cxIcon)/2); } else { // L'icona deve vedersi subito dentro il focus rect iconRect.left += 3; captionRect->left += m_cxIcon + 3; } // Center the icon vertically iconRect.top += ((iconRect.Height() - m_cyIcon)/2); break;case ST_ALIGN_HORIZ_RIGHT:GetClientRect(&btnRect);if (title->IsEmpty()){// Center the icon horizontallyiconRect.left += ((iconRect.Width() - m_cxIcon)/2);}else{// L'icona deve vedersi subito dentro il focus rectcaptionRect->right = captionRect->Width() - m_cxIcon - 3;captionRect->left = 3;iconRect.left = btnRect.right - m_cxIcon - 3;// Center the icon verticallyiconRect.top += ((iconRect.Height() - m_cyIcon)/2);}break; case ST_ALIGN_VERT: // Center the icon horizontally iconRect.left += ((iconRect.Width() - m_cxIcon)/2); if (title->IsEmpty()) { // Center the icon vertically iconRect.top += ((iconRect.Height() - m_cyIcon)/2); } else { captionRect->top += m_cyIcon; } break; } // If button is pressed then press the icon also if (IsPressed) iconRect.OffsetRect(1, 1); // Ole'! pDC->DrawState(iconRect.TopLeft(),iconRect.Size(), (m_MouseOnButton == TRUE || IsPressed) ? m_hIconIn : m_hIconOut, (IsDisabled ? DSS_DISABLED : DSS_NORMAL), (CBrush*)NULL);} // End of DrawTheIconvoid CButtonST::PreSubclassWindow() {UINT nBS;nBS = GetButtonStyle();// Check if this is the default buttonif (nBS & BS_DEFPUSHBUTTON) m_bIsDefault = TRUE;// Add BS_OWNERDRAW styleSetButtonStyle(nBS | BS_OWNERDRAW);CButton::PreSubclassWindow();} // End of PreSubclassWindowBOOL CButtonST::PreTranslateMessage(MSG* pMsg) {InitToolTip();m_ToolTip.RelayEvent(pMsg);return CButton::PreTranslateMessage(pMsg);} // End of PreTranslateMessageLRESULT CButtonST::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) {if (message == WM_LBUTTONDBLCLK){message = WM_LBUTTONDOWN;}return CButton::DefWindowProc(message, wParam, lParam);} // End of DefWindowProcvoid CButtonST::SetDefaultInactiveBgColor(BOOL bRepaint){m_crInactiveBg = ::GetSysColor(COLOR_BTNFACE); if (bRepaint == TRUE) Invalidate();} // End of SetDefaultInactiveBgColorvoid CButtonST::SetInactiveBgColor(COLORREF crNew, BOOL bRepaint){m_crInactiveBg = crNew; if (bRepaint == TRUE) Invalidate();} // End of SetInactiveBgColorconst COLORREF CButtonST::GetInactiveBgColor(){return m_crInactiveBg;} // End of GetInactiveBgColorvoid CButtonST::SetDefaultInactiveFgColor(BOOL bRepaint){m_crInactiveFg = ::GetSysColor(COLOR_BTNTEXT); if (bRepaint == TRUE) Invalidate();} // End of SetDefaultInactiveFgColorvoid CButtonST::SetInactiveFgColor(COLORREF crNew, BOOL bRepaint){m_crInactiveFg = crNew; if (bRepaint == TRUE) Invalidate();} // End of SetInactiveFgColorconst COLORREF CButtonST::GetInactiveFgColor(){return m_crInactiveFg;} // End of GetInactiveFgColorvoid CButtonST::SetDefaultActiveBgColor(BOOL bRepaint){m_crActiveBg = ::GetSysColor(COLOR_BTNFACE); if (bRepaint == TRUE) Invalidate();} // End of SetDefaultActiveBgColorvoid CButtonST::SetActiveBgColor(COLORREF crNew, BOOL bRepaint){m_crActiveBg = crNew; if (bRepaint == TRUE) Invalidate();} // End of SetActiveBgColorconst COLORREF CButtonST::GetActiveBgColor(){return m_crActiveBg;} // End of GetActiveBgColorvoid CButtonST::SetDefaultActiveFgColor(BOOL bRepaint){m_crActiveFg = ::GetSysColor(COLOR_BTNTEXT); if (bRepaint == TRUE) Invalidate();} // End of SetDefaultActiveFgColorvoid CButtonST::SetActiveFgColor(COLORREF crNew, BOOL bRepaint){m_crActiveFg = crNew; if (bRepaint == TRUE) Invalidate();} // End of SetActiveFgColorconst COLORREF CButtonST::GetActiveFgColor(){return m_crActiveFg;} // End of GetActiveFgColorvoid CButtonST::SetFlatFocus(BOOL bDrawFlatFocus, BOOL bRepaint){m_bDrawFlatFocus = bDrawFlatFocus;// Repaint the buttonif (bRepaint == TRUE) Invalidate();} // End of SetFlatFocusBOOL CButtonST::GetFlatFocus(){return m_bDrawFlatFocus;} // End of GetFlatFocusBOOL CButtonST::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) {// If a cursor was specified then use it!if (m_hCursor != NULL){::SetCursor(m_hCursor);return TRUE;}return CButton::OnSetCursor(pWnd, nHitTest, message);} // End of OnSetCursorvoid CButtonST::SetTooltipText(CString* spText, BOOL bActivate){// We cannot accept NULL pointerif (spText == NULL) return;// Initialize ToolTipInitToolTip();// If there is no tooltip defined then add itif (m_ToolTip.GetToolCount() == 0){CRect rectBtn; GetClientRect(rectBtn);m_ToolTip.AddTool(this, (LPCTSTR)*spText, rectBtn, 1);}// Set text for tooltipm_ToolTip.UpdateTipText((LPCTSTR)*spText, this, 1);m_ToolTip.Activate(bActivate);} // End of SetTooltipTextvoid CButtonST::SetTooltipText(int nId, BOOL bActivate){CString sText;// load string resourcesText.LoadString(nId);// If string resource is not emptyif (sText.IsEmpty() == FALSE) SetTooltipText(&sText, bActivate);} // End of SetTooltipTextvoid CButtonST::ActivateTooltip(BOOL bActivate){// If there is no tooltip then do nothingif (m_ToolTip.GetToolCount() == 0) return;// Activate tooltipm_ToolTip.Activate(bActivate);} // End of EnableTooltipBOOL CButtonST::GetDefault(){return m_bIsDefault;} // End of GetDefaultvoid CButtonST::DrawTransparent(BOOL bRepaint){m_bDrawTransparent = TRUE;// Restore old bitmap (if any)if (m_dcBk.m_hDC != NULL && m_pbmpOldBk != NULL){m_dcBk.SelectObject(m_pbmpOldBk);}m_bmpBk.Detach();m_dcBk.Detach();// Repaint the buttonif (bRepaint == TRUE) Invalidate();} // End of DrawTransparentvoid CButtonST::InitToolTip(){if (m_ToolTip.m_hWnd == NULL){// Create ToolTip controlm_ToolTip.Create(this);// Create inactivem_ToolTip.Activate(FALSE);}} // End of InitToolTipvoid CButtonST::PaintBk(CDC * pDC){CClientDC clDC(GetParent());CRect rect;CRect rect1;GetClientRect(rect);GetWindowRect(rect1);GetParent()->ScreenToClient(rect1);if (m_dcBk.m_hDC == NULL){m_dcBk.CreateCompatibleDC(&clDC);m_bmpBk.CreateCompatibleBitmap(&clDC, rect.Width(), rect.Height());m_pbmpOldBk = m_dcBk.SelectObject(&m_bmpBk);m_dcBk.BitBlt(0, 0, rect.Width(), rect.Height(), &clDC, rect1.left, rect1.top, SRCCOPY);}pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &m_dcBk, 0, 0, SRCCOPY);} // End of PaintBkHBRUSH CButtonST::CtlColor(CDC* pDC, UINT nCtlColor) {return (HBRUSH)::GetStockObject(NULL_BRUSH); } // End of CtlColorvoid CButtonST::OnSysColorChange() {CButton::OnSysColorChange();m_dcBk.DeleteDC();m_bmpBk.DeleteObject();} // End of OnSysColorChange#undef ST_USE_MEMDC#undef ST_LIKEIE
源码下载
0 0
- VC之按钮控件位置大小界面设置
- 动态设置控件大小位置
- VC++按钮控件字体设置
- 按钮背景图片 大小 和 位置 设置。
- VC界面美化之按钮
- VC界面美化之按钮
- VC界面美化之按钮
- VC对话框大小和位置设置
- c#动态设置控件位置及大小
- MFC 设置控件位置和大小
- vc学习之窗口大小发生变更时使控件自动摆放到合适的位置
- VC MFC 获取屏幕大小 程序窗口大小位置 控件大小位置
- vc 获取和设置控件的大小
- VC控件大小和字体设置
- MFC界面控件位置大小控制的EasySize使用说明
- 设置窗口位置和大小+动态创建按钮
- VC改变控件或对话框的大小和位置方法
- 设置GVIM的默认初试界面大小、启动位置
- 第四周项目二 分数类的雏形
- 【c语言】最大公约数
- 兔子-servlet的request中获取传来的int型参数
- Eclipse+Python+Pydev环境搭建
- ACM杭电1005 Number Sequence
- VC之按钮控件位置大小界面设置
- 安装python模块时出现:error: Setup script exited with error: command 'gcc' failed with exit status 1
- 兔子--java服务器端把对象列表转化为jsonarray
- 分数类的锥形
- 创建表单web页
- 选定数据库类型,搭建数据库
- 解决XRDP远程登录ubuntu系统无法恢复上次回话的问题
- JAVA 类集
- 用Java代码写一个判断两个二叉树是否相同