wxwidgets显示不规则Frame
来源:互联网 发布:软件license未授权 编辑:程序博客网 时间:2024/05/20 18:17
#include "wx/wx.h"
//定义Frame类
class ShapedFrame: public wxFrame
{
public:
ShapedFrame();
~ShapedFrame();
private:
wxBitmap m_bmp;
bool m_hasShape;
wxPoint m_delta;
void OnMouseMove(wxMouseEvent& event);
void OnPaint(wxPaintEvent& event);
void OnMouseLeftDown(wxMouseEvent& event);
void OnMouseLeftUp(wxMouseEvent& event);
void SetWindowShape();
#ifdef __WXGTK__
void OnWindowCreate(wxWindowCreateEvent& event);
#endif
DECLARE_EVENT_TABLE()
};
//建立事件处理连接。鼠标移动事件由OnMouseMove捕获,重绘事件由OnPaint捕获,鼠标左键按下事件由OnMouseLeftDown捕获~
BEGIN_EVENT_TABLE(ShapedFrame, wxFrame)
EVT_MOTION(ShapedFrame::OnMouseMove)
EVT_PAINT(ShapedFrame::OnPaint)
EVT_LEFT_DOWN(ShapedFrame::OnMouseLeftDown)
EVT_LEFT_UP(ShapedFrame::OnMouseLeftUp)
#ifdef __WXGTK__
EVT_WINDOW_CREATE(ShapedFrame::OnWindowCreate)
#endif
END_EVENT_TABLE()
//分别实现类中函数
ShapedFrame::ShapedFrame()
: wxFrame((wxFrame*)NULL, wxID_ANY, wxEmptyString,wxDefaultPosition,wxSize(250,300),\
wxFRAME_SHAPED | wxSIMPLE_BORDER | wxFRAME_NO_TASKBAR | wxSTAY_ON_TOP)
{
wxImage::AddHandler(new wxPNGHandler);
m_hasShape = false;
m_bmp.LoadFile(wxT("penguin.png"),wxBITMAP_TYPE_PNG);
if(!m_bmp.Ok()){
wxMessageBox(wxT("sorry, could not load file."));
}
SetSize(wxSize(m_bmp.GetWidth(),m_bmp.GetHeight()));
SetWindowShape();
}
#ifdef __WXGTK__
void ShapedFrame::OnWindowCreate(wxWindowCreateEvent& event){
SetWindowShape();
}
#endif
void ShapedFrame::SetWindowShape(){
wxRegion region(m_bmp,*wxWHITE);
m_hasShape = SetShape(region);
}
void ShapedFrame::OnMouseMove(wxMouseEvent& event){
wxPoint pt = event.GetPosition();
if(event.Dragging() && event.LeftIsDown()){
wxPoint pos = ClientToScreen(pt);//pos为点击位置
Move(wxPoint(pos.x-m_delta.x,pos.y-m_delta.y));
}
}
void ShapedFrame::OnMouseLeftDown(wxMouseEvent& event){
CaptureMouse();
wxPoint pt = ClientToScreen(event.GetPosition());
wxPoint origin = GetPosition();
int dx = pt.x-origin.x;
int dy = pt.y-origin.y;
m_delta = wxPoint(dx,dy);
}
void ShapedFrame::OnMouseLeftUp(wxMouseEvent& event){
if(HasCapture()){
ReleaseMouse();
}
}
void ShapedFrame::OnPaint(wxPaintEvent& event){
wxPaintDC dc(this);
dc.DrawBitmap(m_bmp,0,0,true);
}
ShapedFrame::~ShapedFrame()
{
}
- wxwidgets显示不规则Frame
- wxWidgets实现不规则窗体
- wxWidgets实现不规则窗体
- 如何做不规则的Frame
- wxwidgets学习笔记——在Frame上显示时间,实现能够定时刷新的时钟
- Gtk显示不规则按钮
- wxwidgets显示中文
- wxWidgets 显示下载进度条
- wxWidgets 不规则透明WinForm窗体(通过透明图片实现)
- 文章图片的不规则显示
- wxWidgets菜单上显示图标
- wxWidgets为什么没有立即显示?
- wxWidgets下显示下载进度条
- frame隐藏显示
- 隐藏、显示frame框架
- 显示隐藏 -<FRAME <FRAMESET
- C#以不规则方式显示图像
- linux下显示不规则图片窗口
- 图图
- Android UI 优化 [ 类别:Layout ] #3 merge用法 -android
- python知识点讨论
- 带你学习JQuery:合成事件
- TreeView 绑定 以及 选择被选中的值
- wxwidgets显示不规则Frame
- 行列的数据间距
- ORACLE DUAL表详解
- verilog规范
- tomcat部署web项目的3中方法
- Dom笔记1:什么是Dom编程
- struts文件上传 文件大小控制
- plsql知识梳理-存储过程和java调用
- VSS使用指南