界面默认状态属性
wxWidegts对于linux和windows下的默认属性有很多是不一样的。所以,通过wxWidegts写的界面程序在跨平台的情况下,请尽量把所有界面属性都写全了。
另外对于一些界面初始化风格,有些是windows下特有的。
如窗口类型中的:
wxSTATIC_BORDER
wxTRANSPARENT_WINDOW
wxALWAYS_SHOW_SB
wxSTATIC_BORDER等等
在跨平台进行开发的时候,也需要把这些内容特定的分开。
wxString初始化
在默认的c++程序中,windows字符串的默认编码格式是GBK(当然和IDE的设置和运行环境也有一定关系),在linux下却是UTF-8。
在程序中,默认的使用了wxString(“你好”);这种默认的构造函数。
这时候,在调试程序的过程中发现,界面上的字符串并没有正常显示。通过GDB调试,发现字符串已经正常初始化,已经有内存地址,但是内容却是缺失的。
通过对wxString官方文档,找到了可以指定编码格式的构造方法。
所以在linux下,需要通过wxString(“你好”, wxConvUTF8);指定UTF-8编码格式来初始化。
当然也可以通过wxString(wxT(“你好”))这种方式来格式化字符串。
为了方便,可以通过ifdef的方式来区分操作系统,构造wxString的内容。
如:
#ifdef _WINDOWS
return wxString(m_string.c_str());
#else
return wxString(m_string.c_str(), wxConvUTF8);
#endif
wxRadioBox控件注意事项
由于我的程序是由键盘来控制的,不使用鼠标。通过捕获键盘左右事件调用SetFocus()接口,来切换wxRadioButton。
这边可以看到,调用SetFocus()接口后,wxRadioButton获取到了焦点,但是黑色光标却没有正常移动到对应的Button上。
这时候,对wxRadioBox控件调用GetSelection()接口的时候,他的返回值仍是0,表示焦点还在第一个button上。无论是显示,还是值都出现了问题。
但是,在windows下SetFo