Shader Compiler 界面进展3
先上图:
这两天主要做了几件事:
1. 修改了左边FileList窗口.
问题 1) wxListCtrl 控件 list模式下以行为主. 改用report模式, 设置为单列, 并隐藏列头, 代码如下
m_pListCtrl = new MyListCtrl(this, MyListCtrl::ID_LISTCTRL, wxDefaultPosition, wxSize(200, -1), wxLC_REPORT| wxLC_SINGLE_SEL| wxSUNKEN_BORDER| wxLC_NO_HEADER ); wxListItem itemCol; itemCol.SetImage(-1); m_pListCtrl->InsertColumn(0, itemCol); m_pListCtrl->SetColumnWidth(0, wxLIST_AUTOSIZE_USEHEADER); m_pListCtrl->DeleteAllItems();
注意: listCtrl中删除内容是使用 DeleteAllItems, 设置自动列宽应该是 wxLIST_AUTOSIZE, 但我这里不好使, 所以使用wxLIST_AUTOSIZE_USEHEADER, 只容下25个左右字符, 多的以…代替
2) 增加划过高亮功能, 监听 EVT_MOTION 事件,测试是否鼠标位置在 item上, 并设置item的背景颜色
const long id = HitTest(event.GetPosition(), wxLIST_HITTEST_ONITEMLABEL ); SetItemBackgroundColour(id, *wxRED);
2. 字符编码转换, 我使用的是 unicode 的wx库, 工程设置也为 unicode
char* pstr = "测试编码"; wxString str(pstr, wxConvLocal);
3. 加载文件, 一次读取所有文件 多加4字节, 并设为0, 解决加载乱码, 这部分代码从 CodeBlocks 项目中摘录, 应该先判断文件内容编码的, 我还没做, 先全部使用 wxConvLocal 转换
size_t size = editFile.Length(); wxByte* buf = new wxByte[editFile.Length()+4]; buf[size + 0] = 0; buf[size + 1] = 0; buf[size + 2] = 0; buf[size + 3] = 0; editFile.Read((void*)buf, editFile.Length());
大体上事件处理都有了, 接下来就是 shader 本身的处理了.