各位大虾,最近碰到一个奇怪的问题,请各位指点一下。
先说下问题所在吧。首先,创建主工程MFC(Based Dialog),在主工程中调用一个对话框,该对话框在OnInitDialog中利用CStatusBarCtrl创建一个状态栏,可以正常显示,使用;其次,再创建一个工程DLL(MFC),添加对话框,在对话框中按照第一步的方式创建再创建一个状态栏;然后,在主工程中调用第二步创建的DLL,调用其中的对话框,却发现DLL中对话框中状态栏无法显示,调试过程中一切正常,利用GetLastError(),也未发现异常。
注:1 如果在主工程中,先调用DLL中的对话框,可以看到状态栏,然后再调用主工程中的对话框,则同样看不到状态栏。 反正先调用哪个对话框,就可以正常显示状态栏,后调用的无法显示。
2 如果在主工程中,先调用主工程的对话框,正确显示状态栏后,再在主工程调用其它类似含有状态栏的对话框,都是可以显示的。
测试环境如下:
工具:VS2005+ Sp1,SDK: WM5.0 Pocket SDk
OS :XP + sp3
相关代码如下:
在Dialog初始化时创建StatusBar,具体代码如下:
主工程,被调用对话框的创建状态栏代码
CStatusBarCtrl m_LocalStatus; //成员变量,头文件中声明
BOOL bRet = m_LocalStatus.Create(WS_CHILD|WS_VISIBLE|CBRS_BOTTOM, CRect(0,0,0,0), this, 1234);
if (bRet)
{
CRect rect;
GetClientRect(&rect);
int widths[STATUSBAR_PART] = { rect.right*9/16, -1};
m_LocalStatus.SetParts(STATUSBAR_PART, widths);
m_LocalStatus.SetText(_T("Local Status OK"),0,0);
}
DLL中对话框创建状态栏代码:
CStatusBarCtrl m_RemoteStatus; //成员变量,头文件中声明
BOOL bRet = m_RemoteStatus.Create(WS_CHILD|WS_VISIBLE|CBRS_BOTTOM, CRect(0,0,0,0), this, 4321);
if (bRet)
{
CRect rect;
GetClientRect(&rect);
int widths[STATUSBAR_PART] = { rect.right*9/16, -1};
m_RemoteStatus.SetParts(STATUSBAR_PART, widths);
m_RemoteStatus.SetText(_T("Remote Status OK"),0,0);
}
还望各位大侠指点一下!