我尝试给一个软件换皮肤。直接用ON_COMMAND(ID_LOADSKIN, OnLoadskin)没有问题,其中ID_LOADSKIN是一个MENUITEM的ID(MENUITEM "&LoadSkin",ID_LOADSKIN), OnLoadskin()是负责换皮肤的method. 可当我改写ButtonPressed(CString m_ButtonName),并让相关button去做同样的事情时,
else if(m_ButtonName == "BUTTON_POP1")
{
OnLoadskin();
}
程序会死掉,而debugger告诉我错在:
wincore.cpp
LRESULT CWnd::Default()
{
// call DefWindowProc with the last message
_AFX_THREAD_STATE* pThreadState = _afxThreadState.GetData();
return DefWindowProc(pThreadState->m_lastSentMsg.message,
pThreadState->m_lastSentMsg.wParam, pThreadState->m_lastSentMsg.lParam);
}我想大概是我有一些该清除/释放的东西没清除? 可我不是很懂。。 MENUITEM 与 BUTTON不该是一样的吗?为了这个突如其来的VC项目,我已经不断在试着看doc,书和源码,可两三个月的时间除了比较容易让人变得蓬头垢面老眼昏花,对我而言学好VC真的是不够。:p 帮帮忙吧。另外,msdn里说,
ON_COMMAND( id, memberFxn )
...
It indicates which function will handle a command message from a command user-interface object such as a menu item or toolbar button.
为什么我把ON_COMMAND(BUTTON_POP1, OnLoadskin)也加到BEGIN_MESSAGE_MAP里就什么反应都没有呢? 谢谢。
else if(m_ButtonName == "BUTTON_POP1")
{
OnLoadskin();
}
程序会死掉,而debugger告诉我错在:
wincore.cpp
LRESULT CWnd::Default()
{
// call DefWindowProc with the last message
_AFX_THREAD_STATE* pThreadState = _afxThreadState.GetData();
return DefWindowProc(pThreadState->m_lastSentMsg.message,
pThreadState->m_lastSentMsg.wParam, pThreadState->m_lastSentMsg.lParam);
}我想大概是我有一些该清除/释放的东西没清除? 可我不是很懂。。 MENUITEM 与 BUTTON不该是一样的吗?为了这个突如其来的VC项目,我已经不断在试着看doc,书和源码,可两三个月的时间除了比较容易让人变得蓬头垢面老眼昏花,对我而言学好VC真的是不够。:p 帮帮忙吧。另外,msdn里说,
ON_COMMAND( id, memberFxn )
...
It indicates which function will handle a command message from a command user-interface object such as a menu item or toolbar button.
为什么我把ON_COMMAND(BUTTON_POP1, OnLoadskin)也加到BEGIN_MESSAGE_MAP里就什么反应都没有呢? 谢谢。
afx_msg void OnLoadskin();
UINT StringToID(CString m_ID)
{
struct ID
{
UINT m_ID;
char* m_Name;
} IDS[] = { BUTTON_PLAY, "BUTTON_PLAY",
BUTTON_MAXIMIZE, "BUTTON_MAXIMIZE",
BUTTON_STOP, "BUTTON_STOP",
...
BUTTON_POP1, "BUTTON_POP1",
BUTTON_POP2, "BUTTON_POP2",
...};
for(int i = 0; i < sizeof(IDS) / sizeof(ID); i++)
{
if(m_ID == IDS[i].m_Name)
return IDS[i].m_ID;
}
return 0;
}
ID和name是一样的。Hmm, 怎么办呢?