65.9K
CodeProject 正在变化。 阅读更多。
Home

RAD C++ 集成开发环境

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.34/5 (23投票s)

2008年6月7日

CPOL

3分钟阅读

viewsIcon

98983

downloadIcon

3474

C++ 开发人员的 RAD 工具,代码生成器

项目示例包含在 ZIP 包的 'projects' 文件夹中

RAD Studio Screenshot

引言

RAD Studio (又名 RAD C++ IDE) 是一个专门为加快开发流程而设计的工具,无需运行笨重的集成开发环境。RAD Studio 专注于高度提高易用性,它在 IDE 中提供了现场 GUI 设计器以及事件处理程序连接。它还减轻了为一系列控件编写事件处理程序的负担,从普通按钮到非常复杂的 Grid 控件。该项目最初是为 gcc-mingw 编译器设计的。它完全基于 RAD C++ GUI 库,该库也已移植到 Microsoft Visual C++。

背景

RAD Studio 的基本理念是为 C++ 开发人员提供高度提高的易用性。RAD Studio 生成的代码可以与 DEV C++ 编译,没有任何问题,如果 v1.2.4 radc++.hlibradc++.a 存在于 dev c++ 安装文件夹中。

使用代码

如果您从阅读源代码开始,您可能会迷失方向,因为它严重依赖于 RAD C++ GUI 库本身。检查一个应用程序要容易得多。如果有人有兴趣审查代码,请随时提出任何问题。

RADStudio 的核心当然是 RAD C++ GUI 库,但文件 denv.hdform.hdcontrol.h 是创建您自己的对话框设计器的非常好例子,您也可以在您的商业应用程序中使用。

RADStudio 生成的代码是纯 C 风格的代码,中等水平的 C 开发者很容易理解,因为 RAD C++ 库本身专注于易用性。这是一个在 RADStudio 中设计的对话框/表单的小例子,然后代码导出为自定义框架

Screenshot of a simple form created in RAD Studio

//Header file for Form1 - Form1.h
FormProcedure CForm1_Procedure(FormProcArgs);

class CForm1 : public Form {
    public:
        Button Button20;
        TextBox TextBox21;

        //constructor
        CForm1();

        //Form events
        void onClose(CForm1 &me);
        void onFocus(CForm1 &me);
        void onLeftClick(CForm1 &me, int mouseX, int mouseY);
        void onLoad(CForm1 &me);
        void onMouseMove(CForm1 &me, int mouseX, int mouseY);
        void onRefresh(CForm1 &me);
        void onResize(CForm1 &me, int newWidth, int newHeight);
        void onRightClick(CForm1 &me, int mouseX, int mouseY);

        //Controls' events
        void Button20_onClick(CForm1 &parent,Button &me);
        void TextBox21_onChange(CForm1 &parent, TextBox &me, String newText);
};
//And corresponding cpp file for Form1 - Form1.cpp
CForm1::CForm1() : Form("Form 1", 95, 127, 400, 210, RCP_SIMPLE,
                   True, True, False, False, True, 
                   _window(HWND_DESKTOP),False,0) {
    Button20.create("Button 20", AUTO_ID, 238, 98, 100, 25, 
                    *this,True,True,False,False);
    TextBox21.create("TextBox 21", AUTO_ID, 28, 98, 200, 25, 
                    *this,True,True,False,False,WS_EX_CLIENTEDGE);
    this->procedure=CForm1_Procedure;
    SetWindowLong(hwnd,GWL_USERDATA,(LONG)this);
    this->onLoad(*this);
}

FormProcedure CForm1_Procedure(FormProcArgs) {
    CForm1 *FRM = reinterpret_cast  (GetWindowLong(hwnd,GWL_USERDATA));
    ON_COMMAND_BY(FRM->Button20)  FRM->Button20_onClick(*FRM,FRM->Button20);
    ON_TEXT_CHANGED(FRM->TextBox21) FRM->TextBox21_onChange(*FRM, 
                    FRM->TextBox21,FRM->TextBox21.getText());
    ON_CLOSE() FRM->onClose(*FRM);
    ON_FOCUS() FRM->onFocus(*FRM);
    ON_LEFT_CLICK() FRM->onLeftClick(*FRM,_xmouse,_ymouse);
    ON_MOUSEMOVE() FRM->onMouseMove(*FRM,_xmouse,_ymouse);
    ON_PAINT() FRM->onRefresh(*FRM);
    ON_RESIZE() FRM->onResize(*FRM,FRM->getWidth(),FRM->getHeight());
    ON_RIGHT_CLICK() FRM->onRightClick(*FRM,_xmouse,_ymouse);
    return 0;
}

/* implementation of event handlers and developer's code */
void CForm1::Button20_onClick(CForm1 &parent,Button &me){
/* Code when button is clicked. */
}
void CForm1::TextBox21_onChange(CForm1 &parent, TextBox &me, String newText){
/* Code when text is changed. */
}
/* implementation of event handlers and developer's code */
void CForm1::onClose(CForm1 &me) {
/* [X] Code when form is closed . */
Application.close(); //remove this line if it is not main form of application
}
void CForm1::onFocus(CForm1 &me) {
/* When form receives focus */
}
void CForm1::onLeftClick(CForm1 &me, int mouseX, int mouseY) {
/* When left mouse button is clicked */
}
void CForm1::onLoad(CForm1 &me) {
/* Code when for is very first time loaded. */
}
void CForm1::onMouseMove(CForm1 &me, int mouseX, int mouseY) {
/* When mouse cursor moves over surface of form */
}
void CForm1::onRefresh(CForm1 &me) {
/* When surface of form is redrawn */
}
void CForm1::onResize(CForm1 &me, int newWidth, int newHeight) {
/* Code when form is resized. */
}
void CForm1::onRightClick(CForm1 &me, int mouseX, int mouseY) {
/* When right mouse button is clicked */
}
//Main program file
#define PROJECT_NAME "RAD C++ Studio Project"
#include 

enum __BOOL { False=0, True=1 };//IDE specific

/* Globals go here which are accessible throughout application code */

#include "Form1.h"

CForm1 Form1;

#include "Form1.cpp"

rad_main()
rad_end()
</radc++.h>

编译 RAD Studio 生成的代码

RAD Studio 尚未与任何编译器集成,但它生成的代码确实可以编译。请首先从 www.bloodshed.net 获取 DEV C++ 的副本并安装它。然后从 radcpp.com 的主页获取 RAD C++ GUI 库 1.2.4 DevPak 并安装它。

一旦两者都安装完毕,启动 RAD C++ 并打开您保存的 GUI 项目。使用菜单 导出 | 框架类 导出您的项目,选择一个文件夹以将项目文件和代码文件写入其中,然后点击 确定。现在打开 RADCPP_Project.dev,编译并运行,享受简单性。

看点

RAD Studio 正在不断开发和增强。它正在与更多 c++ 编译器兼容,但目前它生成的代码正是它所构建的(即 rad c++ gui 库)。它背后的库也正在不时更新,并计划移植到 X11-Linux 环境以及 Mac OSX。我们希望最终为 C++ 开发人员提供一个免费、功能齐全的 IDE,以便快速开发 GUI 应用程序并跨平台使用。

重要

RAD Studio 仍处于开发过程中。为什么?因为我一直专注于完成 RAD C++ GUI 库。需要一些额外的努力才能使其成为一个功能齐全的 IDE。总的来说,它似乎是稳定的,但如果它崩溃了,请通过向这篇文章发布消息来通知我,以便我可以修复它。

© . All rights reserved.