24,854
社区成员
发帖
与我相关
我的任务
分享
精简过的特性:
1. 英语之外语言.
2. GUI安装卸载程序.
3. GUI的gvim菜单.
4. 无用的Tool
5. vimtutor启动脚本
6. DOS终端版vim
.........................
添加了的东西:
1. python2x.dll
2. 默认的_vimrc配置文件
3. ctags.exe, cscope.exe
4. taglist,bufferexplorer......
5. 最新的syntax文件
6. NERD_commenter
.....................
// 所有消息响应函数必须以qpEvt开头
#define qpEvt void CALLBACK
#define X_LPARAM(lpa) ((int)(short)LOWORD(lpa))
#define Y_LPARAM(lpa) ((int)(short)HIWORD(lpa))
#define IMPLEMENT_EVENT(EVT) Event<EVT>& qp##EVT() { return RegisterEvent<EVT>(); }
#define IMPLEMENT_EVENT_GET(CLASS) \
template <typename T> \
Event<T>& RegisterEvent() \
{ \
Event<T>* p = NULL; \
WORD id = T::GetEventId<CLASS>(); \
if (m_evtFlag.Size() <= id) m_evtFlag.Resize(m_evtFlag.Size() == 0 ? 8 : id); \
if (!m_evtFlag[id]) \
{ \
do { qpNewPtr(p, Event<T>); } while (p == NULL); \
m_evtFlag.Set(id, true); \
EventObject obj = {p, id}; \
m_evtObj.Add(obj); \
} \
else \
{ \
EventObject obj = {NULL, id}; \
p = static_cast<Event<T>*>(m_evtObj.Find(obj)->obj); \
} \
qpASSERT(p != NULL); \
return *p; \
} enum
#define SEND_EVENT(EVT) SEND_##EVT(EVT)
#define EVENT_GET_ID(EVT) template<typename T> static WORD GetEventId() { return T::Id##EVT; }
#define EVENT_SENDER_BEGIN(EVT) if (m_evtFlag.Size() > Id##EVT && m_evtFlag[Id##EVT]) {
#define EVENT_SENDER_END(EVT, VALUE) \
for (WORD i = 0; i < m_evtObj.Size(); ++i) \
{ \
if (m_evtObj[i].id == Id##EVT) \
{ \
(*static_cast<Event<EVT>*>(m_evtObj[i].obj))(VALUE); \
if (i > Id##EVT) \
{ \
m_evtObj.Swap(i, Id##EVT); \
m_evtObj.Resize(m_evtObj.Size()); \
} \
break; \
} \
} \
}
// WM_CREATE
#define SEND_EvtCreate(EVT) \
case WM_CREATE: \
EVENT_SENDER_BEGIN(EVT) \
EVT evt(m_wnd, this, reinterpret_cast<LPCREATESTRUCT>(lpa), res, user, false); \
EVENT_SENDER_END(EVT, evt); \
break
struct EvtCreate
{
EvtCreate(HWND w, Object* o, LPCREATESTRUCT c, LRESULT& r, bool& u, bool s)
: wnd(w), owner(o), createStruct(c), res(r), user(u), stop(s) {}
HWND wnd;
Object* owner;
LPCREATESTRUCT createStruct;
LRESULT& res;
bool& user;
bool stop;
EVENT_GET_ID(EvtCreate);
};
class Canvas : public Widget
{
public:
void Create();
protected:
bool ProcessEvent(UINT msg, WPARAM wpa, LPARAM lpa, LRESULT& res, bool& user);
public:
IMPLEMENT_EVENT(EvtPaint)
IMPLEMENT_EVENT(EvtTimer)
IMPLEMENT_EVENT_GET(Canvas)
{
IdEvtPaint,
IdEvtTimer,
LastEvtId
};
};