我需要生成FLTK C++类的包装器才能在纯C中使用它.我知道,SWIG可以做到这一点,我知道如何为C#,Python等生成包装器.但我不知道如何使用C++包装C++痛饮.这是一项简单的任务,但我找不到答案:)请帮助.
我目前有一个项目,我使用最新的编译器(即默认值)在Visual Studio 2015中编程.不幸的是,我要求我的项目在C++ 98环境中编译和执行 - 有没有办法让我在Visual Studio中通过某种方式更改编译器版本来执行此操作,以便我可以检查我的项目是否仍然有效?
此外,在这个项目中我使用FLTK 1.3.3(一个GUI包) - 如果我确实可以在Visual Studio 2015中执行此操作,我是否需要使用C++ 98模式重建此库?
我正在使用C++编写Stroustrup的原理和实践.我试图让以下程序编译.
#include <FL/Fl.H>
#include <FL/Fl_Box.H>
#include <Fl/Fl_Window.H>
int main()
{
Fl_Window window(200, 200, "Window title");
Fl_Box box(0,0,200,200,"Hey, I mean, Hello, World!");
window.show();
return Fl::run();
}
Run Code Online (Sandbox Code Playgroud)
我尝试编译它,g++ -std=c++11 trial.cpp -o trial
但然后它抛出以下错误
/tmp/ccaLRS7L.o: In function `main':
trial.cpp:(.text+0x26): undefined reference to `Fl_Window::Fl_Window(int, int, char const*)'
trial.cpp:(.text+0x50): undefined reference to `Fl_Box::Fl_Box(int, int, int, int, char const*)'
trial.cpp:(.text+0x5f): undefined reference to `Fl_Window::show()'
trial.cpp:(.text+0x64): undefined reference to `Fl::run()'
trial.cpp:(.text+0x84): undefined reference to `Fl_Window::~Fl_Window()'
trial.cpp:(.text+0xae): undefined reference to `Fl_Window::~Fl_Window()'
/tmp/ccaLRS7L.o: In function `Fl_Box::~Fl_Box()':
trial.cpp:(.text._ZN6Fl_BoxD2Ev[_ZN6Fl_BoxD5Ev]+0x13): undefined …
Run Code Online (Sandbox Code Playgroud) 我试图从Stroustrup的原理和实践... C++中获取图形示例,但无济于事.我已经安装了fltk的东西,并知道它工作正常,因为我设法得到一个窗口显示使用他的书的附录中建议的程序:
#include <FL/Fl.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Window.H>
int main(){
Fl_Window window(200,200, "title here");
Fl_Box box(0,0,200,200,"Hey, hello wrld");
window.show();
return Fl::run();
}
Run Code Online (Sandbox Code Playgroud)
然而,尝试使用他的Simple_window.h(可以在他的网站上找到)给出"对'Window'的引用是模棱两可的",因为它已经在usr/include/X11/Xh.所以我尝试将命名空间指定为相关的命名空间:
struct Simple_window : Graph_lib::Window { //Changed Window to inc. namespace
Simple_window(Point xy, int w, int h, const string& title );
bool wait_for_button(); // simple event loop
.
.
.
Run Code Online (Sandbox Code Playgroud)
但这给了我一堆我不理解的错误:
$ clear; g++ -Wno-deprecated window.cpp -o holz
/tmp/ccIFivNg.o: In function `main':
window.cpp:(.text+0x64): undefined reference to `Simple_window::Simple_window(Point, int, int, String const&)'
/tmp/ccIFivNg.o: In function `Graph_lib::Window::~Window()':
window.cpp:(.text._ZN9Graph_lib6WindowD2Ev[_ZN9Graph_lib6WindowD5Ev]+0x14): undefined reference …
Run Code Online (Sandbox Code Playgroud) 根据FLTK 1.3.2文档:
Unicode支持最近才被添加到FLTK,但仍然不完整.
但是,应该实现以下内容:
值得注意的是,FLTK中Unicode和UTF-8的初始实现涉及三个重要方面:
- 提供Unicode字符表和一些简单的相关功能
- 将char*变量和函数参数从单字节每字符表示转换为UTF-8可变长度
序列- 修改显示字体界面以接受通用Unicode字符或UCS代码,而不仅仅是ASCII或Latin1字符.
我的问题是,我如何在我的FLTK控件上实际显示Unicode?我找不到任何接受Unicode的小部件功能.例如,这是该label
函数的签名:
void Fl_Widget::label ( const char * text )
首先,我还是新来的,所以不知道如何格式化代码,所以它在这个问题上看起来很整洁,我希望这是可以接受的.我遵循Stroustrup的编程原则和实践.你可能会猜到问题是什么......是的FLTK安装.我已仔细按照所有步骤在VS C++ 2013中构建项目; 第1204-1206页.(我已经成功完成了附录C,与std_lib_facilities.h有关).
我正在尝试构建以下win32项目,如本书所示:
#include <FL/Fl.h>
#include <FL/Fl_Box.h>
#include <FL/Fl_Window.h>
int main()
{
Fl_Window window(200, 200, "Window title");
Fl_Box box(0, 0, 200, 200, "Hey, I mean, Hello, World!");
window.show();
return Fl::run();
}
Run Code Online (Sandbox Code Playgroud)
构建解决方案后,我收到一条错误,内容如下:错误1错误C1083:无法打开包含文件:'FL/Fl.h':没有这样的文件或目录
我还按照步骤将FLTK lib目录中的一些lib文件复制到c:\ users\pablo\desktop\c ++ course files\visual c ++\win32project1\source.cpp这是我为Visual Studio Express 2013创建的文件有人能帮助我吗?我在哪里可以找到这个丢失的文件?问题可能与FLTK版本在VS 2013中使用有点过时这一事实有关吗?(当我编译FLTK库时,我遇到了一些与备份文件和一些警告有关的错误.)我已经研究了很长时间了.我在这个论坛中发现了一些与此有关的问题,但与上述问题并不完全相关.首先十分感谢.
PS嗯,有一个问题与同样的错误有关.我已经按照提到的一些技巧作为同一问题的答案,但无济于事.
("对于这些类型的错误,您可以做的一个巧妙的技巧是将光标放在#include语句的文件名中,然后按Ctrl + Shift + G.它将失败并显示一个消息框,显示包含路径的内容.解决方案是通过右键单击项目并转到"属性">"C/C++">"常规"并设置"其他包含目录",简单地向SDK添加其他包含路径.")
显示的另一个建议也不起作用:("确保include目录不是FL目录,而是其父目录.原因是当你说#include"FL/Fl.h"时,你问的是编译器进入一个名为FL的文件夹,找到Fl.h,它将驻留在FL的父目录中.如果你指定FL作为include目录,那么你只需要说#include"Fl.h"").
我正在使用" 使用C++编程原理和实践 "一书学习c ++.第16章介绍了通过接口库使用FLTK库的gui部分的技术.
本章中的练习之一是动画图像的动画,由一个类中实现的启动和停止按钮控制.对于计时我发现使用FLTK Fl::add_timeout
并且Fl::repeat_timeout
是一个比进入无限循环更好的解决方案并使用Sleep(),阻止其他回调.
我没有成功使用Fl::add_timeout
和实现工作解决方案Fl::repeat_timeout
,但是在这里使用带有开始和停止按钮的进度条找到了一个示例:
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Progress.H>
#include <FL/Fl_Button.H>
Fl_Progress* progBar;
void runcount(void*)
{
if (progBar->value() == progBar->maximum())
{
Fl::remove_timeout(runcount);
progBar->value(0);
}
else
{
Fl::repeat_timeout(1, runcount);
progBar->value(progBar->value() + 1);
}
}
void cb_startb(void)
{
Fl::add_timeout(1, runcount);
}
void cb_stopb(void)
{
Fl::remove_timeout(runcount);
}
int main (int argc, char *argv[])
{
Fl_Double_Window window(200,70,"ProgressBar Test");
progBar = new Fl_Progress(5, 10, window.w()-10, 20);
progBar->box(FL_SHADOW_BOX);
progBar->selection_color((Fl_Color)4);
progBar->minimum(0);
progBar->maximum(10);
Fl_Button* …
Run Code Online (Sandbox Code Playgroud) 我将 FLTK 从 1.1 更新到 1.3,然后我无法编译更新前运行良好的代码。
\n\n...\n [100%] Building CXX object CMakeFiles/PROSTVIEW.dir/include/nifti/vtkznzlib.cxx.o\n Linking CXX executable PROSTVIEW\n /usr/local/lib/libfltk.a(fl_font.cxx.o): In function `fontopen(char const*, int, bool, int)\':\n fl_font.cxx:(.text+0x298): undefined reference to `FcPatternCreate\'\n fl_font.cxx:(.text+0x362): undefined reference to `FcPatternAddString\'\n fl_font.cxx:(.text+0x3e3): undefined reference to `FcPatternAddString\'\n fl_font.cxx:(.text+0x3f7): undefined reference to `FcPatternAddInteger\'\n fl_font.cxx:(.text+0x40b): undefined reference to `FcPatternAddInteger\'\n fl_font.cxx:(.text+0x424): undefined reference to `FcPatternAddDouble\'\n fl_font.cxx:(.text+0x43c): undefined reference to `FcPatternAddString\'\n fl_font.cxx:(.text+0x4df): undefined reference to `FcMatrixRotate\'\n fl_font.cxx:(.text+0x4f7): undefined reference to `FcPatternAddMatrix\'\n fl_font.cxx:(.text+0x516): undefined reference to `FcPatternAddBool\'\n fl_font.cxx:(.text+0x52c): undefined reference to `FcPatternAddBool\'\n …
Run Code Online (Sandbox Code Playgroud) 我一直在尝试以fltk
几种不同的方式构建Windows,但我总是最终:
configure:错误:C编译器无法创建可执行文件(msys fltk/configure)
要么
检查工作C编译器:C:/MinGW/bin/gcc.exe - 破解(CMake-gui)
我已经试过了fltk 1.3.0
,1.3.3
而且我甚至使用了三种不同的MinGW发行版,GCC
版本:5.1.0
; 4.9.2
和3.4.5
.但它不会编译.以下是./configure文件生成的一些错误日志:
$ ./configure --prefix = C:/libs/fltk-1.3.3
-----------
核心测试.
-----------
configure:1336:检查构建系统类型configure:1354:result:i686-pc-mingw32 configure:1362:检查主机系统类型configure:1376:result:i686-pc-mingw32 configure:1439:检查gcc configure:1455:found/c/mingw32/bin/gcc configure:1465:结果:gcc configure:1709:检查C编译器版本configure:1712:gcc --version&5 gcc.exe(i686-win32-dwarf-rev2,由MinGW-W64构建项目)4.9.2版权所有(C)2014 Free Software Foundation,Inc.这是免费软件; 查看复制条件的来源.没有保修; 甚至不适用于适销性或特定用途的适用性.
配置:1715:$?= 0 configure:1717:gcc -v&5使用内置规范.COLLECT_GCC = c:\ mingw32\bin\gcc.exe COLLECT_LTO_WRAPPER = c:/ mingw32/bin /../ libexec/gcc/i686-w64-mingw32/4.9.2/lto-wrapper.exe目标:i686-w64-mingw32配置:../../../src/gcc-4.9.2/configure --host = i686-w64-mingw32 --build = i686-w64-mingw32 --target = i686-w64-mingw32 - prefix =/mingw32 --with-sysroot =/c/mingw492/i686-492-win32-dwarf-rt_v4-rev2/mingw32 --with-gxx-include-dir =/mingw32/i686-w64-mingw32/include/c ++ --enable-shared --enable-static --disable-multilib --enable-languages = ada,c,c …
在 macOS 上,使用英文键盘时,组合键CMD+Backtick
用于循环浏览应用程序打开的窗口。例如,在德语键盘上,组合是CMD+<
. 甚至可以使用System Preferences
-> Keyboard
-> Shortcuts
-> Keyboard
->配置此快捷方式Move focus to next window
。
对于使用 FLTK 的多窗口 GUI 应用程序,我想利用此快捷方式,但不知道如何获取用户在其系统上设置的组合。所以我正在寻找一个 macOS 系统调用,它可以为我提供Move focus to next window
在这台 Mac 上使用的组合键。
当然,如果有一种使用 FLTK 的内置方式,我会更喜欢这种方式,而不是使用本机系统调用。
\n\n谷歌搜索这个问题是一场噩梦......
\n\n2017年8月10日更新\n\xc3\x96\xc3\xb6\的答案给了我一些额外研究的想法。从那以后我了解到首选项存储在 中com.apple.symbolichotkeys
,更准确地说是存储在键 27 中。
27 = {\n enabled = 1;\n value = {\n parameters = (\n 98,\n 11,\n 524288\n );\n type = standard;\n };\n };\n
Run Code Online (Sandbox Code Playgroud)\n\n参数 1 …