MFC中位图和位图按钮的方法

14 篇文章 0 订阅

VC 背景填充位图的几种方法
IDB_BG 是位图资源的ID

方法一
OnEraseBkgnd(CDC* pDC) 
{
 // 
设置画刷为希望的背景
 CDC backBmp;               
 backBmp.CreateCompatibleDC(pDC);
 CBitmap bitmap;
 bitmap.LoadBitmap(IDB_BG);
 CBrush m_brushBackground;
 m_brushBackground.CreatePatternBrush(&bitmap);    ///
创建位图画刷
 CBrush* pOldMemDCBrush=pDC->SelectObject(&m_brushBackground); 
 pDC->PatBlt(0,0,m_ScrollRect.Width(),m_ScrollRect.Height(),PATCOPY);
 pDC->SelectObject(pOldMemDCBrush);
 return TRUE;
}


方法二
OnEraseBkgnd(CDC* pDC) 
{
 CBitmap m_pMap;
 m_pMap.LoadBitmap(IDB_BG);
 CRect rect;
 GetClientRect(&rect); 
 BITMAP bm;
 CDC dcMem;
 m_pMap.GetObject(sizeof(BITMAP),&bm);
 dcMem.CreateCompatibleDC(pDC); 
 CBitmap* pOldBitmap = dcMem.SelectObject(&m_pMap);
 for (register int nX=0;nX<rect.right-rect.left;nX+=bm.bmWidth)
  for(int nY=0;nY<rect.bottom-rect.top;nY+=bm.bmHeight)
 pDC->BitBlt(nX,nY,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);
 dcMem.SelectObject(pOldBitmap); 
 return TRUE;
}

方法三
OnEraseBkgnd(CDC* pDC) 
{
 CBitmap bmp;
 bmp.LoadBitmap(IDB_BG); ///
加载位图
 CBrush m_brushBackground;
 m_brushBackground.CreatePatternBrush(&bmp);    ///
创建位图画刷
 CRect rect;
 GetClientRect(&rect); 
 pDC->FillRect(rect,&m_brushBackground); //
用背景画填充区域
 return TRUE;
}

MFC中位图按钮的方法
   曾加两个按钮所需的按下、抬起、选中和禁止状态对应的位图及其ID标识。在本文中共增加了8个位图,它们的ID标识分别为” ImageDown”、”ImageUp”、”ImageFocus”、 ”ImgaeDis”、”CancelD”、”CancelU”、”CancelF”、“CancelX“。要注意这里的ID标识都要包含双引号,从而使得 Visual C++ 不为它们生成标识符定义语句。
  (1)利用LoadBitmaps函数绘制按钮
     向CBMTestDlg类中添加成员变量:
     protected:     CBitmapButton button1; //定义位图按钮
     在CBMTestDlg类的构造函数CBMTestDlg::CBMTestDlg中添加如下代码:
      //调入按钮位图资源函数
     if(!button1.LoadBitmaps(_T(“ImageUp", //按钮一所需位图
    _T(“ImageDown",_T(“ImageFocus",
      _T(“ImageDis”)))  // 抬起、按下、选中和禁止
     { 
    TRACE("Failed to load bitmap for button1\n";
              AfxThrowResourceException();    
      }
     向类CBMTestDlg类的OnInitDialog成员函数中添加如下代码:
   //将对话框中按钮标识与位图连接
           VERIFY(button1.SubclassDlgItem(IDOK, this));
   button1.SizeToContent();//使按钮大小适应位图
   (2)利用AutoLoad函数绘制按钮
     向CBMTestDlg类中添加成员变量:
      protected:
      CBitmapButton button2; //定义位图按钮
     向类CBMTestDlg类的OnInitDialog成员函数中添加如下代码:
     VERIFY(button2.AutoLoad(IDCANCEL,this)); //调入位图

///

选定要使用位图的按钮(以OK按钮为例,假设其标识符为IDC_BTONOK)
选其属性中的Owner draw选项,此时,在对话框编辑器中就可看到原先显示在
按钮上的字符都消失了。将按钮的Caption改为OK(必须为大写)。
打开Insert菜单,单击其中的Resource选项,随后选择Bitmap。再按下Import(导入)按钮,将所需位图导入项目(Project)。可以在Resource View窗口中通过右键单击刚才导入的位图,将其ID(标识符)改为"OKU",注意:字符必须为大写,双引号及字母U必不可少。字母U代表的按钮为按下状态时所显示的位图。此外还可使用后缀D、F、X,分别表示按下、拥有输入焦点时、按钮处于无效状态时所显示的位图。通过对同一个按钮的不同状态使用不同的位图,很容易做出具有动态效果的按钮。 
 
  当将按钮所需使用的位图导入到项目中后,就应该在使用位图按钮的那个对话框的类声明文件中加入位图按钮变量的定义CBitmapButton m_BtonOK。同时,在适当的位置(一般是在对话框的OnInitDialog()函数中)加入如下语句:m_BtonOK.AutoLoad(IDC_BTONOK),使程序在运行时将位图装入内存并显示。

先把这个位图这个选项选上,然后在程序里加下面的代码:

HBITMAP  hBitmap;
    
hBitmap = ::LoadBitmap(::AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BITMAP_DRAW));
    
m_btn.SetBitmap(hBitmap);

其中m_btn为按钮变量,IDB_BITMAP_DRAW为要加载的位图资源ID.
    

QQ头像的那种列表框

procedure TFrmPrint.UpdateImageList;
var
MyImage:TAllImage;
MyLabel:TLabel;
SPos,i, j:integer;
NumOfDICOMFrame:integer;
begin
for i := scbImageList.ComponentCount - 1 downto 0 do
scbImageList.Components[i].free;


//
图象列表
//FindFiles(sPath:string;var FileBuf:TStringList;var fileCount:integer); //
返回目录下所有文件名 ,数目
FindFiles( CurrentExam.ImagePath,FileBuf,ImageNum);

if ImageNum=0 then
begin
exit;//
没有图象的情况
pictureNum:=1;
end;
ImageNum:=fileCount;//
图象数目
j:=1;
for i := 1 to (ImageNum) do
begin
//
为图像预留空间
MyImage := TAllImage.Create(scbImageList);
MyImage.Parent := scbImageList;
imgPath:=FileBuf[i];
if imgPath[length(imgPath)]<>
\ then
imgPath:=imgPath+
\; //得到图像路径
MyImage.Hint := FileBuf[i]; //
图像的提示性文字是该图像的文件名

MyImage.Filename:=MyImage.Hint;

SPos := scbImageList.VertScrollBar.ScrollPos;
MyImage.TOP := (j - 1) * 75+25*j -sPos;;
//MyImage.TOP := (j - 1) * 100 + 5*j -sPos;;
MyImage.Left := 10;
MyImage.Height := 75;
MyImage.Width := 100;
MyImage.Stretch := true;

MyImage.Filename:=MyImage.Hint;
// MyImage.GetFirstFrame;

MyImage.ShowHint := true;
MyImage.OnClick := OnImgClick; {---
加图象到报表中---}
j:= j + 1;

end;

MyImage.Free;
procedure TFrmPrint.UpdateImageList;
var
MyImage:TAllImage;
MyLabel:TLabel;
SPos,i, j:integer;
NumOfDICOMFrame:integer;
begin
for i := scbImageList.ComponentCount - 1 downto 0 do
scbImageList.Components[i].free;


//
图象列表
//FindFiles(sPath:string;var FileBuf:TStringList;var fileCount:integer); //
返回目录下所有文件名 ,数目
FindFiles( CurrentExam.ImagePath,FileBuf,ImageNum);

if ImageNum=0 then
begin
exit;//
没有图象的情况
pictureNum:=1;
end;
ImageNum:=fileCount;//
图象数目
j:=1;
for i := 1 to (ImageNum) do
begin
//
为图像预留空间
MyImage := TAllImage.Create(scbImageList);
MyImage.Parent := scbImageList;
imgPath:=FileBuf[i];
if imgPath[length(imgPath)]<>
\ then
imgPath:=imgPath+
\; //得到图像路径
MyImage.Hint := FileBuf[i]; //
图像的提示性文字是该图像的文件名

MyImage.Filename:=MyImage.Hint;

SPos := scbImageList.VertScrollBar.ScrollPos;
MyImage.TOP := (j - 1) * 75+25*j -sPos;;
//MyImage.TOP := (j - 1) * 100 + 5*j -sPos;;
MyImage.Left := 10;
MyImage.Height := 75;
MyImage.Width := 100;
MyImage.Stretch := true;

MyImage.Filename:=MyImage.Hint;
// MyImage.GetFirstFrame;

MyImage.ShowHint := true;
MyImage.OnClick := OnImgClick; {---
加图象到报表中---}
j:= j + 1;

end;

MyImage.Free;

1, ComboBox.style := csOwnerDrawFixed;
2
ComboBox1.ItemHeight = 32;
3
ComboBox1.DropDownCount = 2;
Form上放一个TImageList,把它的Height属性设为32,然后随便加几个OICQbmp文件;

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
ComboBox1.Canvas.Brush.Color := clWindow;
if odSelected in State then ComboBox1.Canvas.Brush.Color := clHighLight;
ComboBox1.Canvas.FillRect(Rect);
ImageList1.Draw(ComboBox1.Canvas, Rect.Left, Rect.Top, Index);
end;


procedure TForm1.ComboBox1DropDown(Sender: TObject);
begin
if ComboBox1.Items.Count <> ImageList1.Count then
ComboBox1.Items.Text := StringOfChar(#13, ImageList1.Count);
end;
//
添加一个Header
var
myHeader:TmxHeader;
i:integer;
begin
myHeader:=mxOutlookBarPro1.AddHeader;
myHeader.Caption:=
MyCaption;
//
添加MyHeader的其他属性
//
删除一个MyHeader
mxOutlookbarPro1.DeleteHeader(i);
//
修改一个MyHeader
mxOutlookBarPro1.RenameHeaderByIndex(i);

end;
//
添加一个Button
var
mybutton:TmxButton;
begin
myButton:=mxOutlookbarPro1.HeaderbyIndex(i).Addbutton;
myButton.Caption:=
MyCaption;
//
删除一个myCaption
end

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值