wxWidgets初步体验

    最近在学习wxWidgets,一个跨平台的图形库,据说现在正在开发嵌入式版。关于wxWidgets更多的信息请访问:http://www.wxWidgets.org/
    从网上把wxWidgets库下载下来,按照README的提示configure,make,make install,很顺利的完成了库的安装。wxWidgets库的默认安装路径是/usr/local,因此得修改/etc/ld.so.conf把默认路径加进去然后运行一下ldconfig命令。这样就配置好了wxWidgets库了。
    进行图形开发,没有一个GUI设计工具那几乎是不可能的。DialogBlocks是进行wxWidgets界面设计的最好工具,可惜要收费。不过,wxFormBuilder和wxSmith也不错。在使用wxFormBuilder的时候,我发现从官网上下下来的源码不可以安装,要搞什么Premake,嫌麻烦就在官网上找了下,结果发现有二进制文件可以下。下下来后解压,就可以直接用了。在界面布局的时候,跟MFC有很大区别。你不可以拖动控件也不可以用鼠标移动控件,你只能用SizerBox把你想要的界面布好后才能往上面添加控件,也就是说不管你用的是Frame还是Dialog你只有在上面放置SizerBox后才能添加控件。
    设计好GUI后,你可以选择是生成C++代码还是XRC文件。我选择了XRC文件,这样功能代码和GUI就分离开了,程序就少了很多界面代码并且以后改起来也很方便。在编写功能代码的时候,有两个问题搞费了我不少脑细胞。
    一个问题就是在使用wxTextCtrl接收数据时,不管我输入多少次,程序得到的总是第一次的数据。后来发现是窗口的Close和Distroy差别所致,Close只关闭窗口,而不调用析构函数,这样输入的数据就在内存中,直到你的程序关闭才释放。这样就不管输入多少次数据,程序得到的总是第一次输入的。Distroy方法会立即调用析构函数,释放窗口所占的资源,这样当你再次打开窗口进行操作时是一个全新的窗口。
    另一个问题是关于wxComboBOx,打算用wxComboBox和wxButton来模拟键盘输入功能。由于wxComboBox的Text域只能显示一个Item,并且只有一个SetValue方法可以往Text域添加一个Item。一个按钮事件产生一个Item,这样当一个按钮事件产生时就会覆盖前面那个Item的值。刚开始时想当然的就在每个按钮事件里用SetValue方法直接往Text域里添值,结果大失所望。最后只得另想他法。
    附上在学习wxWidgets时写的Makefile.

  1. PROGRAM = hoole
  2. OBJPATH = ./
  3. SRCPATH = ./
  4. COMPILER = $(shell wx-config --cxx)
  5. LINKER = $(shell wx-config --cxx)
  6. DEFINES = -g
  7. WXCXXFLAG = `wx-config --cxxflags`
  8. FLAGS = $(DEFINES)$(WXCXXFLAG)
  9. WXLIB = `wx-config --libs`
  10. LIBS = $(WXLIB)
  11. SOURCES = $(wildcard $(SRCPATH)*.cpp)
  12. OBJS = $(addprefix $(OBJPATH),$(patsubst $(SRCPATH)%.cpp,%.o,$(SOURCES)))
  13. .PHONY: all clean veryclean rebuild
  14. all:$(PROGRAM)
  15. $(PROGRAM):$(OBJS)
  16.     $(LINKER) $(SOURCES) $(LIBS) $(FLAGS) -o $@
  17. $(OBJPATH)%.o:$(SRCPATH)%.cpp $(SRCPATH)*.h
  18.     $(COMPILER) $(FLAGS) $(LIBS) -c $< -o $@
  19. clean:
  20.     rm $(OBJPATH)*.o $(PROGRAM)
  21. veryclean:
  22.     rm $(PROGRAM)
  23. rebuild:veryclean all

 

你可能感兴趣的:(mfc,dialog,compiler,图形,wildcard,linker)