亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

wxWidgets實現圖片和文件按鈕

2020-01-26 13:31:31
字體:
來源:轉載
供稿:網友

在wxWidgets中,想要通過其本身的控件來實現圖片+文件的按鈕,貌似不太容易做到。但是可以通過重載wxControl來自繪圖片+文件按鈕。下面給出的是已經封裝好的按鈕類:

wxBitmapButtonEx.h

#ifndef _BITMAP_BUTTON_EX_H#define _BITMAP_BUTTON_EX_H #include "wx/wx.h" enum eBitmapButtonStatus{ BitmapButtonNormal, BitmapButtonEnter, BitmapButtonDown, BitmapButtonUp, BitmapButtonLeave, BitmapButtonDClick, BitmapButtonDisable}; class wxBitmapButtonEx : public wxControl{ DECLARE_DYNAMIC_CLASS(wxBitmapButtonEx) DECLARE_EVENT_TABLE()public: wxBitmapButtonEx(); virtual ~wxBitmapButtonEx();  wxBitmapButtonEx(wxWindow* parent, wxWindowID id,   const wxPoint& pos = wxDefaultPosition,   const wxSize& size = wxDefaultSize,   long style = wxBORDER_NONE,   const wxValidator& validator = wxDefaultValidator); bool Create(wxWindow* parent, wxWindowID id,   const wxPoint& pos = wxDefaultPosition,   const wxSize& size = wxDefaultSize,   long style = wxSUNKEN_BORDER,   const wxValidator& validator = wxDefaultValidator);  wxSize DoGetBestSize() const; void OnPaint(wxPaintEvent& event); virtual void OnEnter(wxMouseEvent& event); virtual void OnLeave(wxMouseEvent& event); virtual void OnDown(wxMouseEvent& event); virtual void OnDClick(wxMouseEvent& event); virtual void OnUp(wxMouseEvent& event); virtual bool Enable(bool enable = true); virtual bool Disable();  //設置正常圖片 wxBitmapButtonEx* set_normal_bitmap(wxBitmap* bitmap);  //設置按鈕按下時的切換圖片 wxBitmapButtonEx* set_down_bitmap(wxBitmap* bitmap);  //設置按鈕按經過時的切換圖片 wxBitmapButtonEx* set_enter_bitmap(wxBitmap* bitmap);  //設置Disable圖片. wxBitmapButtonEx* set_disable_bitmap(wxBitmap* bitmap);  //設置背景圖片 wxBitmapButtonEx* set_background(const wxBitmap& bitmap);  //設置背景顏色 bool set_background_colour(const wxColour& colour);  //設置按鈕文字 void set_button_text(wxString str);  //設置文字字體 void set_text_font(wxFont font); protected: void DrawExistBitmap(wxDC* dc,wxBitmap* image1,wxBitmap* exist_image); private: wxBitmap background_bitmap; bool is_used_bg;  wxBitmap* normal_bitmap; wxBitmap* down_bitmap; wxBitmap* enter_bitmap; wxBitmap* disable_bitmap;  int button_status; wxString text; wxFont text_font;  void DrawBackground(wxDC* dc); };#endif /* _BITMAP_BUTTON_EX_H */

wxBitmapButtonEx.cpp

#include "wxBitmapButtonEx.h"#include <wx/settings.h> BEGIN_EVENT_TABLE(wxBitmapButtonEx, wxControl)EVT_PAINT(wxBitmapButtonEx::OnPaint)EVT_ENTER_WINDOW(wxBitmapButtonEx::OnEnter)EVT_LEAVE_WINDOW(wxBitmapButtonEx::OnLeave)EVT_LEFT_DOWN(wxBitmapButtonEx::OnDown)EVT_LEFT_DCLICK(wxBitmapButtonEx::OnDClick)EVT_LEFT_UP(wxBitmapButtonEx::OnUp)END_EVENT_TABLE() IMPLEMENT_DYNAMIC_CLASS(wxBitmapButtonEx, wxControl) wxBitmapButtonEx::wxBitmapButtonEx(){} wxBitmapButtonEx::wxBitmapButtonEx(wxWindow* parent, wxWindowID id,  const wxPoint& pos,  const wxSize& size,  long style,  const wxValidator& validator): normal_bitmap(NULL), down_bitmap(NULL), enter_bitmap(NULL){ Create(parent, id, pos, size, style, validator);} wxBitmapButtonEx::~wxBitmapButtonEx(){ wxDELETE(normal_bitmap); wxDELETE(enter_bitmap); wxDELETE(down_bitmap);} bool wxBitmapButtonEx::Create(wxWindow* parent, wxWindowID id,  const wxPoint& pos,  const wxSize& size,  long style,  const wxValidator& validator){ normal_bitmap = NULL; down_bitmap = NULL; enter_bitmap = NULL; disable_bitmap = NULL; button_status = BitmapButtonNormal;  if (!wxControl::Create(parent, id, pos, size, style, validator)) {  return false; } SetBackgroundStyle(wxBG_STYLE_SYSTEM); is_used_bg = false; text_font.Create(12,wxSWISS,wxFONTSTYLE_NORMAL,wxNORMAL,false,_T("System"),wxFONTENCODING_DEFAULT);  return true;} wxSize wxBitmapButtonEx::DoGetBestSize() const{ return GetSize();} void wxBitmapButtonEx::DrawExistBitmap(wxDC* dc, wxBitmap* image1,  wxBitmap* exist_image){ int width = DoGetBestSize().GetWidth(); int height = DoGetBestSize().GetHeight(); //wxClientDC dc(this); dc->SetPen(*wxBLACK_PEN); wxColour clr(2,18,245); dc->SetTextForeground(*wxWHITE); //dc->SetBrush(*wxTRANSPARENT_BRUSH); //dc->SetBrush(*wxBLUE_BRUSH); //wxSystemSettings::GetColour(wxSYS_COLOUR_ACTIVECAPTION) wxBrush brush(clr);//  dc->SetBrush(brush);  dc->DrawRectangle(0, 0, width, height); /*wxRect rc = wxRect(0, 0, width, height); dc->DrawRoundedRectangle(rc,5);*/  int x = normal_bitmap->GetWidth(); int y = (height-normal_bitmap->GetHeight())/2.0;  if (image1) { dc->DrawBitmap(*image1, width-x-5, y, true);  //dc->DrawBitmap(*image1, 0, 0, true);  } else { dc->DrawBitmap(*exist_image, width-x-5, y, true);  //dc->DrawBitmap(*exist_image, 0, 0, true); }  if (text.IsEmpty()) { return; }  if (!text_font.IsNull()) { dc->SetFont(text_font); } int pointsize = text_font.GetPointSize();  //dc.SetLayoutDirection(wxLayout_Default);  int bit = text.Find('/n'); if (bit!=-1) { wxString str; str = text.Left(bit); dc->DrawText(str,5,height/2-pointsize-2);  int length = text.Length(); str = text.Mid(bit+1,length-bit-1); dc->DrawText(str,5,height/2); } else { dc->DrawText(text,5,height/2-7); }} void wxBitmapButtonEx::OnPaint(wxPaintEvent& event){ wxPaintDC dc(this); DrawBackground(&dc);  //1.狀態控制繪畫,好處就是可以調用Refresh連背景一起刷新. switch (button_status) {  case BitmapButtonNormal: case BitmapButtonUp: case BitmapButtonLeave: { int width = DoGetBestSize().GetWidth(); int height = DoGetBestSize().GetHeight(); wxClientDC dc(this); dc.SetPen(*wxGREY_PEN); dc.SetBrush(*wxTRANSPARENT_BRUSH);  dc.DrawRectangle(0, 0, width, height); /*wxRect rc = wxRect(0, 0, width, height); dc.DrawRoundedRectangle(rc,5);*/  wxPoint pt[3]; pt[0].x = 1; pt[0].y = height-1; pt[1].x = pt[1].y = 1; pt[2].x = width-1; pt[2].y = 1; dc.SetPen(*wxWHITE_PEN); dc.DrawLines(3,pt);  pt[1].x = width-1; pt[1].y = height-1; dc.SetPen(*wxBLACK_PEN); dc.DrawLines(3,pt);  int x = normal_bitmap->GetWidth(); int y = (height-normal_bitmap->GetHeight())/2.0; dc.DrawBitmap(*normal_bitmap, width-x-5, y, true);  if (!text_font.IsNull()) {  dc.SetFont(text_font);   } int pointsize = text_font.GetPointSize(); //dc.SetLayoutDirection(wxLayout_Default);  int bit = text.Find('/n'); if (bit!=-1) {  wxString str;  str = text.Left(bit);  dc.DrawText(str,5,height/2-pointsize-2);   int length = text.Length();  str = text.Mid(bit+1,length-bit-1);  dc.DrawText(str,5,height/2); } else {  dc.DrawText(text,5,height/2-7); } } //dc.DrawBitmap(*normal_bitmap, 0, 0, true);   break;  case BitmapButtonEnter: //  if (!enter_bitmap_) //  { //   int width = DoGetBestSize().GetWidth(); //   int height = DoGetBestSize().GetHeight(); //   wxClientDC dc(this); //   dc.SetPen(*wxRED_PEN); //   dc.SetBrush(*wxTRANSPARENT_BRUSH);  //   //dc.DrawRectangle(0, 0, width, height); //wxRect rc = wxRect(0, 0, width, height); //dc.DrawRoundedRectangle(rc,5); // //   break; //  } //  dc.DrawBitmap(*enter_bitmap_, 0, 0, true);   break;  case BitmapButtonDown:   DrawExistBitmap(&dc,down_bitmap,normal_bitmap);   break;  case BitmapButtonDClick:   //DrawExistBitmap(&dc,down_bitmap,normal_bitmap);   break;  case BitmapButtonDisable:   //DrawExistBitmap(&dc,disable_bitmap,normal_bitmap);   break;  default: { int width = DoGetBestSize().GetWidth(); int height = DoGetBestSize().GetHeight(); wxClientDC dc(this); dc.SetPen(*wxGREY_PEN); dc.SetBrush(*wxTRANSPARENT_BRUSH);  dc.DrawRectangle(0, 0, width, height); /*wxRect rc = wxRect(0, 0, width, height); dc.DrawRoundedRectangle(rc,5);*/  wxPoint pt[3]; pt[0].x = 1; pt[0].y = height-1; pt[1].x = pt[1].y = 1; pt[2].x = width-1; pt[2].y = 1; dc.SetPen(*wxWHITE_PEN); dc.DrawLines(3,pt);  pt[1].x = width-1; pt[1].y = height-1; dc.SetPen(*wxBLACK_PEN); dc.DrawLines(3,pt);  int x = normal_bitmap->GetWidth(); int y = (height-normal_bitmap->GetHeight())/2.0; dc.DrawBitmap(*normal_bitmap, width-x-5, y, true);  if (text.IsEmpty()) {  break; }  if (!text_font.IsNull()) {  dc.SetFont(text_font); } int pointsize = text_font.GetPointSize(); //dc.SetLayoutDirection(wxLayout_Default);  int bit = text.Find('/n'); if (bit!=-1) {  wxString str;  str = text.Left(bit);  dc.DrawText(str,5,height/2-pointsize-2);   int length = text.Length();  str = text.Mid(bit+1,length-bit-1);  dc.DrawText(str,5,height/2); } else {  dc.DrawText(text,5,height/2-7); } }    break; } } void wxBitmapButtonEx::DrawBackground(wxDC* dc){ if (is_used_bg) {  dc->DrawBitmap(background_bitmap, 0, 0, true); } else {  wxBrush brush(GetBackgroundColour());  wxPen pen(GetBackgroundColour());  dc->SetBrush(brush);  dc->SetPen(pen);  dc->DrawRectangle(0, 0, GetSize().x, GetSize().y); }} void wxBitmapButtonEx::OnEnter(wxMouseEvent& event){ /* button_status = BitmapButtonEnter; Refresh(); Update();*/} void wxBitmapButtonEx::OnLeave(wxMouseEvent& event){ if (!IsEnabled()) {  return; } button_status = BitmapButtonLeave; Refresh(); Update();} void wxBitmapButtonEx::OnDClick(wxMouseEvent& event){ /* button_status = BitmapButtonDown; Refresh(false); Update();*/} void wxBitmapButtonEx::OnDown(wxMouseEvent& event){ button_status = BitmapButtonDown; Refresh(); Update();} void wxBitmapButtonEx::OnUp(wxMouseEvent& event){ if (BitmapButtonDown != button_status) {  return; } button_status = BitmapButtonUp; Refresh(); Update(); wxCommandEvent myEvent(wxEVT_COMMAND_BUTTON_CLICKED, GetId()); myEvent.SetEventObject(this); GetEventHandler()->ProcessEvent(myEvent);} wxBitmapButtonEx* wxBitmapButtonEx::set_normal_bitmap(wxBitmap* bitmap){ normal_bitmap = bitmap; return this;} wxBitmapButtonEx* wxBitmapButtonEx::set_down_bitmap(wxBitmap* bitmap){ down_bitmap = bitmap; return this;} wxBitmapButtonEx* wxBitmapButtonEx::set_enter_bitmap(wxBitmap* bitmap){ enter_bitmap = bitmap; return this;} bool wxBitmapButtonEx::Enable(bool enable){ if (enable) {  button_status = BitmapButtonNormal; } else {  button_status = BitmapButtonDisable; }  Refresh(false); Update(); return wxControl::Enable(enable);} bool wxBitmapButtonEx::Disable(){ return Enable(false);} wxBitmapButtonEx* wxBitmapButtonEx::set_disable_bitmap(wxBitmap* bitmap){ disable_bitmap = bitmap; return this;} wxBitmapButtonEx* wxBitmapButtonEx::set_background(const wxBitmap& bitmap){ is_used_bg = true; background_bitmap = bitmap; return this;} bool wxBitmapButtonEx::set_background_colour(const wxColour& colour){ is_used_bg = false; return wxControl::SetBackgroundColour(colour);}//void wxBitmapButtonEx::set_button_text(wxString str){ text = str;}//void wxBitmapButtonEx::set_text_font(wxFont font){ text_font = font;}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品三级视频福利| 欧美中文字幕在线视频| 国产狼人综合免费视频| 欧美色视频日本高清在线观看| 最近2019中文字幕mv免费看| 国产婷婷97碰碰久久人人蜜臀| 国产亚洲一区二区在线| 神马国产精品影院av| 欧美电影免费观看高清完整| 精品视频中文字幕| 精品久久久久久久久国产字幕| 疯狂蹂躏欧美一区二区精品| 日韩av电影在线播放| 欧美黑人巨大xxx极品| 亚洲网站在线看| 久久久久久中文字幕| 一夜七次郎国产精品亚洲| 亚洲欧美日韩精品久久奇米色影视| 欧美性videos高清精品| 北条麻妃在线一区二区| 精品国产乱码久久久久久婷婷| 欧美资源在线观看| 日韩一二三在线视频播| 日韩av成人在线观看| 欧美成人国产va精品日本一级| 久久久久久久久久久成人| 久久久久国色av免费观看性色| 亚洲电影中文字幕| 国产成人精品av| 欧美在线视频免费观看| 欧美激情网站在线观看| 98精品国产高清在线xxxx天堂| 国产精品中文字幕在线| 亚洲精品福利在线观看| 亚洲精美色品网站| 中文字幕日韩欧美在线视频| 久久激情五月丁香伊人| 亚洲国产精品大全| 亚洲免费高清视频| 91精品久久久久久久久不口人| 国产欧美一区二区三区在线| 亚洲欧美在线x视频| 亚洲中国色老太| 成人国产在线视频| 国产激情视频一区| 欧美一级电影久久| 日本伊人精品一区二区三区介绍| 久久成人综合视频| 久久精品国产视频| 欧美极品少妇xxxxx| 日韩经典中文字幕在线观看| 国产精品女主播| 成人免费自拍视频| 久久久在线免费观看| 欧美激情手机在线视频| 欧美激情视频一区二区| 欧美另类xxx| 日韩中文字幕网址| 国产美女久久久| 成人免费视频a| 国产成人91久久精品| 国产精品极品美女在线观看免费| 2020国产精品视频| 91av福利视频| 欧美激情中文网| 欧美一区二区三区精品电影| 久久视频在线直播| 亚洲性生活视频在线观看| 国产美女91呻吟求| 国外色69视频在线观看| 久久精品视频在线| 欧美一性一乱一交一视频| 亚洲第一精品夜夜躁人人爽| 国产精品久久久久久久久久久久久| 国色天香2019中文字幕在线观看| 亚洲欧美成人在线| 亚洲一区二区三区sesese| 555www成人网| 久久久国产精彩视频美女艺术照福利| 欧美日韩成人网| 欧美成人精品激情在线观看| 亚洲精品国产精品国自产在线| 欧美刺激性大交免费视频| 亚洲综合日韩在线| 中文字幕日韩av| 日韩va亚洲va欧洲va国产| 深夜福利一区二区| 国产精品一久久香蕉国产线看观看| 国产日韩在线观看av| 亚洲欧美精品中文字幕在线| 96sao精品视频在线观看| 欧亚精品在线观看| 国产精品一区二区久久精品| 亚洲毛片在线观看.| 国产精品观看在线亚洲人成网| 色偷偷av一区二区三区| 国产精品午夜视频| 日韩视频亚洲视频| 久久精品91久久香蕉加勒比| 最近2019中文免费高清视频观看www99| 色综合久久中文字幕综合网小说| 国产精自产拍久久久久久| 中日韩美女免费视频网站在线观看| 青青a在线精品免费观看| 亚洲第一免费播放区| 国内精品国产三级国产在线专| 欧美电影免费观看电视剧大全| 欧美成人h版在线观看| 国产大片精品免费永久看nba| 亚洲香蕉av在线一区二区三区| 日韩精品亚洲元码| 国内外成人免费激情在线视频| 久久97久久97精品免视看| 欧美另类老肥妇| 久久99国产精品自在自在app| 久久久成人精品| 97国产在线观看| 日韩免费在线播放| 亚洲精品国产欧美| 国模精品视频一区二区三区| 国产精品极品尤物在线观看| 伊人久久大香线蕉av一区二区| 8050国产精品久久久久久| 久久久精品2019中文字幕神马| 国产精品久久久久久亚洲调教| 亚洲一区二区自拍| 国产精品专区一| 国内成人精品一区| 福利视频第一区| 欧美日韩免费一区| 91视频免费在线| 国产精品高清免费在线观看| 日韩视频免费看| 欧美日本黄视频| 91精品久久久久久久久久入口| 国产成人免费av| 国产精品扒开腿做爽爽爽男男| 欧美国产精品日韩| 久久久精品美女| 久久久久国产精品免费| 日韩国产中文字幕| 国产一区二区三区免费视频| 国产精品久久精品| 久久久久久免费精品| 九九久久久久久久久激情| 欧美又大粗又爽又黄大片视频| 亚洲性视频网址| 国产精品情侣自拍| 97视频在线观看网址| 国产综合视频在线观看| 97精品国产97久久久久久| 久久久av网站| 日韩在线观看免费全集电视剧网站| 久久精品国产视频| 日韩电影中文字幕在线观看| 欧美怡红院视频一区二区三区| 欧美精品激情blacked18| 97超碰蝌蚪网人人做人人爽| 欧美性猛交丰臀xxxxx网站| 日韩男女性生活视频| 久久天天躁狠狠躁夜夜躁| 亚洲午夜精品久久久久久久久久久久| 色yeye香蕉凹凸一区二区av| 久久夜色精品国产欧美乱|