- 浏览: 116903 次
文章分类
最新评论
-
myisland:
可以运行!一开始还以为要用本身就是透明背景的png呢,原来不是 ...
在CodeBlocks中用wxWidgets创建不规则窗口 -
lonerzf:
可以的。感谢。但是还有个问题,工程建立的时候有Configur ...
在CodeBlocks中用wxWidgets创建不规则窗口 -
鸵鸟大仙:
麻烦请问一下怎么在wxwidgets中加载msword.olb ...
利用wxwidgets操纵word -
dqifa:
Rat_boy 写道我现在也在做wxWidgets操作Word ...
利用wxwidgets操纵word -
Rat_boy:
我现在也在做wxWidgets操作Word的功能 但是搞了好久 ...
利用wxwidgets操纵word
我在学习CodeBlocks(10.05,中文)中用wxWidgets(wxWidgets-2.8.12)来创建不规则窗口时,发现图片不能打包到exe文件里面,这样在发布exe程序是必须要带上相应的图片,甚是不方便,经过苦思和辛苦的查阅,终于找到解决办法,现记录下这个过程作为被查,也对与我一样痛苦挣扎的小虾们一点启示吧。
一、准备工作:
1、环境的搭建,不讲了,我的配置是:CodeBlocks(10.05,中文)和wxWidgets(wxWidgets-2.8.12)
2、准备一张图片,本例中的图片为shape.png,见附件。
二、将图片转换成*.h文件:
这里就要使用wxWidgets自带的wxrc.exe(项目在wxWidgets的安装目录中的utils文件夹里面)了。不过wxrc.exe不是现成的,需要自己编译。本例中已包含编译好的wxrc.exe,具体怎么编译就不讲了。现讲讲图片的转换过程:
1、写一个shape.xml的文件,内容如下:
<?xml version="1.0"?> <resource version="2.3.0.1"> <object class="wxBitmap" name="shape">shape.png</object> </resource>
2、转换图片:
点击“开始”菜单-“运行”,输入“cmd”,将当前目录设定为wxrc.exe所在目录,并将shape.png图片拷贝到wxrc.exe所在目录内(这样是为了方便)。
在dos窗口输入wxrc -c shape.xrc -v -o shape.h并回车,即可看到shap.h的文件了。
三、开始不规则窗口项目
1、新建一wxWidgets project项目,具体设置看图。
2、设置窗口属性
3、将shap.h拷贝到TT项目目录中,在TTApp.cpp中包含shap.h头文件,并将添加如下代码:
=====文件名:TTApp.cpp=====
/***************************************************************
* Name: TTApp.cpp
* Purpose: Code for Application Class
* Author: 代启发 ()
* Created: 2012-08-04
* Copyright: 代启发 ()
* License:
**************************************************************/
#include "TTApp.h"
//(*AppHeaders
#include "TTMain.h"
#include <wx/image.h>
#include "shape.h"
//*)
IMPLEMENT_APP(TTApp);
bool TTApp::OnInit()
{
//(*AppInitialize
bool wxsOK = true;
// wxInitAllImageHandlers();
wxImage::AddHandler(new wxPNGHandler); // 必须的
wxXmlResource::Get()->InitAllHandlers(); // 必须的
InitXmlResource();
if ( wxsOK )
{
TTFrame* Frame = new TTFrame(0);
Frame->Show();
SetTopWindow(Frame);
}
//*)
return wxsOK;
}
4、在TTMain.h和TTMain.cpp中添加相应的变量和函数,OnLeftDown(wxMouseEvent& event),OnLeftUp(wxMouseEvent& event),OnLeftDClick(wxMouseEvent& event),OnMouseMove(wxMouseEvent& event),OnRightUp(wxMouseEvent& event)和OnPaint(wxPaintEvent& event)函数是自动生成的,其它的需要手动添加。
/***************************************************************
* Name: TTMain.h
* Purpose: Defines Application Frame
* Author:
* Created: 2012-08-04
* Copyright:
* License:
**************************************************************/
#ifndef TTMAIN_H
#define TTMAIN_H
//(*Headers(TTFrame)
#include <wx/wx.h>
//*)
class TTFrame: public wxFrame
{
public:
TTFrame(wxWindow* parent,wxWindowID id = -1);
virtual ~TTFrame();
private:
//(*Handlers(TTFrame)
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
void OnLeftDown(wxMouseEvent& event);
void OnLeftUp(wxMouseEvent& event);
void OnLeftDClick(wxMouseEvent& event);
void OnMouseMove(wxMouseEvent& event);
void OnRightUp(wxMouseEvent& event);
void OnPaint(wxPaintEvent& event);
void OnWindowCreate(wxWindowCreateEvent& event);
virtual void SetWindowShape();
wxPoint m_delta; // 鼠标拖动窗口时的屏幕坐标 - 窗口左上角的屏幕坐标
bool m_hasShape;
wxBitmap m_bitmap;
//*)
//(*Identifiers(TTFrame)
//*)
//(*Declarations(TTFrame)
//*)
DECLARE_EVENT_TABLE()
};
#endif // TTMAIN_H
/***************************************************************
* Name: TTMain.cpp
* Purpose: Code for Application Frame
* Author:
* Created: 2012-08-04
* Copyright:
* License:
**************************************************************/
#include "TTMain.h"
#include <wx/msgdlg.h>
//(*InternalHeaders(TTFrame)
#include <wx/intl.h>
#include <wx/string.h>
#include <wx/xrc/xmlres.h>
//*)
//helper functions
enum wxbuildinfoformat
{
short_f, long_f
};
wxString wxbuildinfo(wxbuildinfoformat format)
{
wxString wxbuild(wxVERSION_STRING);
if (format == long_f )
{
#if defined(__WXMSW__)
wxbuild << _T("-Windows");
#elif defined(__UNIX__)
wxbuild << _T("-Linux");
#endif
#if wxUSE_UNICODE
wxbuild << _T("-Unicode build");
#else
wxbuild << _T("-ANSI build");
#endif // wxUSE_UNICODE
}
return wxbuild;
}
//(*IdInit(TTFrame)
//*)
BEGIN_EVENT_TABLE(TTFrame,wxFrame)
//(*EventTable(TTFrame)
//*)
#ifdef __WXGTK__
EVT_WINDOW_CREATE(OnWindowCreate)
#endif
END_EVENT_TABLE()
TTFrame::TTFrame(wxWindow* parent,wxWindowID id)
{
//(*Initialize(TTFrame)
Create(parent, id, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSTAY_ON_TOP|wxFRAME_NO_TASKBAR|wxFRAME_SHAPED|wxNO_BORDER, _T("id"));
Center();
m_hasShape = false;
m_bitmap = wxXmlResource::Get()->LoadBitmap(wxT("shape"));
SetSize(wxSize(m_bitmap.GetWidth(), m_bitmap.GetHeight()));
SetToolTip(wxT("Right-click to exit"));
// 此处的处理有些不同
// 如果是GTK界面,如Gnome,那么此时窗口还没有创建,
// 只能在wxEVT_CREATE事件发生之后,调用wxTopLevelWindow::SetShape
// 如果是Windows界面,此时窗口已创建完毕,
// 可以直接调用wxTopLevelWindow::SetShape
#ifndef __WXGTK__
SetWindowShape();
#endif
Connect(wxEVT_PAINT,(wxObjectEventFunction)&TTFrame::OnPaint);
Connect(wxEVT_LEFT_DOWN,(wxObjectEventFunction)&TTFrame::OnLeftDown);
Connect(wxEVT_LEFT_UP,(wxObjectEventFunction)&TTFrame::OnLeftUp);
Connect(wxEVT_LEFT_DCLICK,(wxObjectEventFunction)&TTFrame::OnLeftDClick);
Connect(wxEVT_RIGHT_UP,(wxObjectEventFunction)&TTFrame::OnRightUp);
Connect(wxEVT_MOTION,(wxObjectEventFunction)&TTFrame::OnMouseMove);
//*)
}
TTFrame::~TTFrame()
{
//(*Destroy(TTFrame)
//*)
}
void TTFrame::OnQuit(wxCommandEvent& event)
{
Close();
}
void TTFrame::OnAbout(wxCommandEvent& event)
{
wxString msg = wxbuildinfo(long_f);
wxMessageBox(msg, _("Welcome to..."));
}
void TTFrame::OnLeftDown(wxMouseEvent& event)
{
CaptureMouse();
wxPoint mouseOnScreen = ClientToScreen(event.GetPosition());
wxPoint upleftOnScreen = GetPosition();
m_delta = wxPoint(mouseOnScreen.x - upleftOnScreen.x,mouseOnScreen.y - upleftOnScreen.y);
}
void TTFrame::OnLeftUp(wxMouseEvent& event)
{
if(HasCapture())
ReleaseMouse();
}
void TTFrame::OnLeftDClick(wxMouseEvent& event)
{
if(m_hasShape)
{
wxRegion region;
SetShape(region);
m_hasShape = false;
}
else
{
SetWindowShape();
}
}
void TTFrame::OnMouseMove(wxMouseEvent& event)
{
if(event.Dragging() && event.LeftIsDown())
{
wxPoint mouseOnScreen = ClientToScreen(event.GetPosition());
Move(wxPoint(mouseOnScreen.x - m_delta.x, mouseOnScreen.y - m_delta.y));
}
}
void TTFrame::OnRightUp(wxMouseEvent& event)
{
Close();
}
void TTFrame::OnPaint(wxPaintEvent& event)
{
wxPaintDC dc(this);
dc.DrawBitmap(m_bitmap, 0, 0, true);
}
void TTFrame::SetWindowShape()
{
wxRegion region(m_bitmap, *wxBLUE);
m_hasShape = SetShape(region);
}
参考:
1、 http://blog.chinaunix.net/uid-1693970-id-110252.html
2、 http://blog.csdn.net/joliny/article/details/3510335
- TT.rar (2.3 MB)
- 下载次数: 18
评论
发表评论
-
WX_DEFINE_ARRAY的使用
2018-03-20 12:07 670/**************************** ... -
wxBase64Encode和wxBase64Decode
2016-04-09 15:23 891#include <wx/base64.h> ... -
wxWidgets中 wxButton实现自动点击
2015-06-30 12:59 1110之前在用wxSocket通讯的时候,EVT_SOCKET事件 ... -
按键转换
2015-03-15 12:27 10131 void PopTextCtrl::OnChar(wxK ... -
获取当前路径
2014-03-09 16:51 696#include <wx/stdpaths.h> ... -
程序只运行一个实例,并将前一个实例提到前台
2014-02-28 18:28 936wxWidgets提供了一个用来检测是否只有一个实例(ins ... -
通过重载实现修改wxWidgets文本处理框wxTextCtrl和wxRichTextCtrl的右键弹出菜单
2014-02-27 13:44 2451wxWidget中这块是写死的,这让我感到非常 ... -
过滤wxTextCtrl控件输入的两种方法
2014-02-27 13:40 2028以下两种方法实现wxTextCtrl只接收0-9的数字. ... -
wxBoxSizer,wxFlexGridSizer,wxGridBagSizer,wxGridSizer使用示例
2014-02-26 10:44 1896wxBoxSizer,wxFlexGridSizer,wx ... -
wxWidgets类库结构图
2014-02-26 09:08 1233自从2.5.0开始,wxWidgets既可以编译成单一的代 ... -
wxWidgets框架下基于wxDialog程序的标准退出方法
2014-02-25 16:56 1554退出程序的标准方法 ... -
在exe程序中嵌入图片
2012-10-20 23:44 16141、利用Bin2C将图片转换成“*.c”文件; 2、包含“* ... -
怎样解决静态编译对mingwm10.dll的依赖?
2012-10-15 14:14 1192使用CodeBlocks+wxWidgets2.9.4编写的静 ... -
wxRegEx的使用
2012-10-09 20:35 1642#include <wx/regex.h>#inc ... -
wxWidgets中的wxTimer使用
2012-09-26 15:51 22711、包含头文件: #include <wx/ti ... -
使用wxStringTokenizer分割字符串
2012-08-30 21:51 2401//wxStringTokenizer::wxStringTo ... -
给图片添加图片水印
2012-08-20 10:21 846写在开始 不能用代码同时实现半透明和不规则形状的水印,只能选 ... -
绘制图形并填充
2012-08-17 13:32 992=====文件名:DrawShape.h=== ... -
wxMathPlot
2012-08-17 09:39 1271wxMathPlot wxMathPlot ... -
使用wxWidgets实现所见即所得打印(CodeBlocks)
2012-08-14 18:10 25821、从wxPrintout派生一个类Printout,类源码如 ...
相关推荐
Codeblocks+wxWidgets安装及编译
在 Code::Blocks 中创建 wxWidgets 项目时,需要选择“wxWidgets project”,然后按照向导的提示进行配置。尤其需要注意的是,需要选择正确的 wxWidgets 版本和编译参数,以确保能够正确地使用 wxWidgets 库。 配置...
配置CodeBlocks与wxWidgets的集成,可以让你在CodeBlocks中创建和管理使用wxWidgets库的项目。以下是一个详细步骤的概述: 1. **安装CodeBlocks**:首先,你需要在D盘解压缩`codeblocks-20.03`文件,确保不改变其...
这个是一个外国人写的在CodeBlocks中建立的wxWidgets3.1工程的向导脚本,一放进去直接覆盖掉。
codeblocks的最新版本只配置支持wxwidgets3.0.0,解决在用codeblocks新建工程时,没有wxwidgets版本可选的问题,将wizard.script文件直接覆盖CB安装目录下的CodeBlocks\share\CodeBlocks\templates\wizard\wxwidgets...
在电源管理应用中,wxWidgets提供了窗口、控件和其他GUI元素,使得开发者可以创建用户界面来展示电源状态。 3. **源代码文件**: - `powerMain.cpp` 和 `powerMain.h`:这可能是主窗口类的实现和声明,可能包含了...
标题与描述:“wxWidgets在codeblocks中的配置” 这部分标题与描述着重强调了如何在CodeBlocks这一集成开发环境(IDE)中配置wxWidgets。这表明文章的主要目的是指导开发者如何设置他们的开发环境,以便能够使用...
3. GUI编程:使用wxWidgets库创建窗口、菜单、对话框等元素,以及响应用户的事件,如点击按钮或选择列表项。这需要对事件驱动编程有深入理解。 4. MFC(Microsoft Foundation Classes)与wxWidgets的对比:虽然MFC...
CodeBlocks是一款开源、免费的C++集成开发环境(IDE),而wxWidgets则是一个跨平台的C++库,用于创建GUI应用程序。本项目是利用CodeBlocks作为开发工具,结合wxWidgets库构建的一个统计计算器的源代码实例。这个...
这个压缩包文件“wxWidgets-3.0.4 mingw32-gcc codeblocks可用版本 自编译”是为Windows平台设计的,特别是为那些使用MinGW32编译器和Code::Blocks集成开发环境(IDE)的开发者准备的。 wxWidgets库包含了丰富的...
5. **使用CodeBlocks**:现在,你可以使用新编译的CodeBlocks IDE创建C++项目,并选择wxWidgets作为GUI库。CodeBlocks将自动处理项目设置,使得链接到wxWidgets库变得简单。 通过源码编译CodeBlocks和wxWidgets,...
下面将详细介绍如何安装和配置CodeBlocks,以及如何安装和配置wxWidgets在Windows平台下的wxMSW版本。 一、安装CodeBlocks 1. 首先,访问CodeBlocks的官方网站www.CodeBlocks.org,下载CodeBlocks的安装程序,建议...
通过这个教程,你已经了解了如何在`CodeBlocks`中使用`wxWidgets`库创建一个带有透明效果的窗口。这只是一个基本的示例,实际应用中你还可以根据需求添加更多的功能,如控件、事件处理等。继续深入学习`wxWidgets`和...
这是一款在codeblocks环境下,使用wxWidegts3.1.0类库实现的小型推箱子游戏,使用语言为c++,这家伙这么老了,现在我们老师竟然还要让我们用这个编游戏做课程设计,网上啥资源的没有,编的我想吐,上传这个是为了帮...
通过遵循上述步骤,你可以成功地在Windows上编译wxWidgets并使用Code::Blocks创建基于wxWidgets的应用程序。记得保持软件和库的更新,以获得最佳的开发体验和最新的功能。遇到问题时,参考wxWidgets和Code::Blocks的...
首先,需要安装`codeblocks-8.02mingw-setup.exe`,然后在CodeBlocks中配置wxWidgets的路径,这样就可以在IDE中创建新的wxWidgets项目,编写代码并利用MinGW进行编译和调试。通过这种方式,开发者可以充分发挥这两个...
新推出的wxWidgets3.0.0可以运行CodeBlocks12.11的向导文件补丁,欢迎试用。直接覆盖CB安装目录下的CodeBlocks\share\CodeBlocks\templates\wizard\wxwidgets文件夹中即可
4. **创建新项目**:在CodeBlocks中新建一个C++项目,选择wxWidgets工程模板。确保在项目设置中指定正确的wxWidgets版本和配置。 5. **编写代码**:现在你可以开始编写使用wxWidgets的代码了。例如,创建一个简单的...