网关和子网掩码怎么填:按钮加载位图

来源:百度文库 编辑:中财网 时间:2024/05/09 01:30:07
一,只加载一张位图的方法:1,装入bmp资源,id为IDB_BMP,按钮的bitmap属性设为true,icon属性为false。 2,CButton *pBtn = (CButton *)GetDlgItem(IDB_BMP);
 CBitmap bitMap;
 HBITMAP hBit ;
 if(bitMap.LoadBitmapW(IDB_NORMAL_BTN))
 {
  hBit = (HBITMAP)bitMap.Detach();
  pBtn->SetBitmap(hBit);
 }缺点:图片不会自动拉伸。
二,为按钮的不同状态加载不同的位图:(使用CBitmapButton类)这种方法还可以。
1,按钮属性 Owner Draw选上,按钮ID: IDC_BUTTON1为IDC_BUTTON1添加CButton变量m_button,
2,然后手动将CButton m_button改为
CBitmapButton m_button;
3,在初始化里边
m_button.LoadBitmaps(IDB_BITMAP1, IDB_BITMAP2);//IDB_BITMAP1:平时;IDB_BITMAP2:按下
m_button.SubclassDlgItem(IDC_BUTTON1, this);
m_button.SizeToContent(); 或者用另一种方式,不必为IDC_BUTTON1添加关联的变量。
直接声明CBitmapButton m_button;,在初始化里边调用m_BitmapBtn.AutoLoad(IDC_BUTTON1_AREA,this);//把按钮和变量联系起来m_BitmapBtn.LoadBitmaps(IDB_BITMAP1, IDB_BITMAP2);m_button.SizeToContent();  缺点:1,无法显示文字,需重载DrawItem函数。            2,无法去掉图片的背景色,即只能显示矩形按钮。// NOTE: CMyButton is a class derived from CButton. The CMyButton
// object was created as follows:
//
// CMyButton myButton;
// myButton.Create(_T("My button"),
//      WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW,
//      CRect(10,10,100,30), pParentWnd, 1);
//// This example implements the DrawItem method for a CButton-derived
// class that draws the button's text using the color red.
void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
   UINT uStyle = DFCS_BUTTONPUSH;   // This code only works with buttons.
   ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);   // If drawing selected, add the pushed style to DrawFrameControl.
   if (lpDrawItemStruct->itemState & ODS_SELECTED)
      uStyle |= DFCS_PUSHED;   // Draw the button frame.
   ::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem,
      DFC_BUTTON, uStyle);   // Get the button's text.
   CString strText;
   GetWindowText(strText);   // Draw the button text using the text color red.
   COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, RGB(255,0,0));
   ::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(),
      &lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
   ::SetTextColor(lpDrawItemStruct->hDC, crOldColor);
}//继承CBitmapButton的例子void   MyButton::DrawItem(LPDRAWITEMSTRUCT   lpDrawItemStruct)  
{
//   TODO:   Add   your   code   to   draw   the   specified   item
//从lpDrawItemStruct获取控件的相关信息
CRect   rect=lpDrawItemStruct-> rcItem;
CDC   *pDC=CDC::FromHandle(lpDrawItemStruct-> hDC);
int   nSaveDC=pDC-> SaveDC();
UINT   state   =   lpDrawItemStruct-> itemState;
TCHAR   strText[MAX_PATH   +   1];
::GetWindowText(m_hWnd,   strText,   MAX_PATH); CBitmapButton::DrawItem(lpDrawItemStruct); CRect   rect1=rect;
rect.SetRect(rect1.left,rect1.top,rect1.left+75,rect1.top+24);
//显示按钮的文本
pDC-> SetTextColor(TextColor);
if   (strText!=NULL)
{
CFont*   hFont   =   GetFont();
CFont*   hOldFont   =   pDC-> SelectObject(hFont);
CSize   szExtent   =   pDC-> GetTextExtent(strText,   lstrlen(strText));
CPoint   pt(   rect.CenterPoint().x   -   szExtent.cx   /   2,   rect.CenterPoint().y   -   szExtent.cy   /   2);
if   (state   &   ODS_SELECTED)  
pt.Offset(1,   1);
int   nMode   =   pDC-> SetBkMode(TRANSPARENT);
if   (state   &   ODS_DISABLED)
pDC-> DrawState(pt,   szExtent,   strText,   DSS_DISABLED,   TRUE,   0,   (HBRUSH)NULL);
else
pDC-> DrawState(pt,   szExtent,   strText,   DSS_NORMAL,   TRUE,   0,   (HBRUSH)NULL);
pDC-> SelectObject(hOldFont);
pDC-> SetBkMode(nMode);
} pDC-> RestoreDC(nSaveDC); }
三,继承CButton类,重写OnPaint函数,为Button的不同状态画位图(BitBlt,TransparentBlt,StretchBlt ,MaskBlt,PlgBlt)。 四,
可以采用CButtonST控件,挺好用的,比MFC的那些封装好用。
假设按钮ID为IDC_BUTTON1
1.添加成员变量
CButtonST m_btn;
2.添加位图资源,ID设为IDB_BITMAP1
3.在OnInitDialog函数中初始化按钮m_btn.SubclassDlgItem(IDC_BUTTON1,this);
m_btn.SetBitmaps(IDB_BITMAP1,RGB(0,0,0));
m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
注: 上面的SetBitmaps函数会将图片中颜色值为RGB(0,0,0)的点设为透明。 五,把button按钮属性设置为ower draw
然后映射onDrawItem消息
在ondraw函数内自己绘制就可以了
void CUi6Dlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
if(nIDCtl == IDC_HELLO_CFAN)
{
//绘制按钮框架
UINT uStyle = DFCS_BUTTONPUSH;
//是否按下去了?
if (lpDrawItemStruct->itemState & ODS_SELECTED)
uStyle |= DFCS_PUSHED;
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
dc.DrawFrameControl(&lpDrawItemStruct->rcItem, DFC_BUTTON, uStyle);
//输出文字
dc.SelectObject(&m_Font);
dc.SetTextColor(RGB(0, 0, 255));
dc.SetBkMode(TRANSPARENT);
CString sText;
m_HelloCFan.GetWindowText(sText);
dc.TextOut(lpDrawItemStruct->rcItem.left + 20, lpDrawItemStruct->rcItem.top + 20, sText);
//是否得到焦点
if(lpDrawItemStruct->itemState & ODS_FOCUS)
{
//画虚框
CRect rtFocus = lpDrawItemStruct->rcItem;
rtFocus.DeflateRect(3, 3);
dc.DrawFocusRect(&rtFocus);
}
return;
}
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
} 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chu_qun/archive/2008/12/02/3428968.aspx