ActiveX编写的控件,还没有运行程序的时候设置的属性在运行程序以后全部没有了!!!!!晕。。。
老田低代码 2005-11-28 10:15:33 大佬们:
我为了学习C++做了个基于VC++6.0ActiveX的网格控件,其中有两个属性:Rows,Cols在将控件画在VB窗体上然后设置属性是可以的!但是运行VB程序以后就没有了。。。不知道为什么会这样!!
代码如下:
void CMyCellCtrl::SetRows(long nNewValue)
{
m_Rows=nNewValue;
m_CellDoc->SetRows(nNewValue);
//改变控件属性的时候重新画表格
InvalidateControl();
SetModifiedFlag();
BoundPropertyChanged(dispidRows);
}
还有我希望在控件中使用滚动条:
CScrollBar m_hScrollBar; //水平滚动条
然后在控件的OnDraw中:(这里用this是不是不行啊?但是为什么能够编译通过呢?)
m_hScrollBar.Create(WS_CHILD |WS_VISIBLE | SBS_HORZ,rtHScrollRect,this,IDC_HSCROLLBAR);
编译控件,然后画在VB窗体上。这是是有滚动条出现的,但是出现了程序错误:
错误位置:
Wincore.cpp下
void AFXAPI AfxHookWindowCreate(CWnd* pWnd)
{
_AFX_THREAD_STATE* pThreadState = _afxThreadState.GetData();
if (pThreadState->m_pWndInit == pWnd)
return;
if (pThreadState->m_hHookOldCbtFilter == NULL)
{
pThreadState->m_hHookOldCbtFilter = ::SetWindowsHookEx(WH_CBT,
_AfxCbtFilterHook, NULL, ::GetCurrentThreadId());
if (pThreadState->m_hHookOldCbtFilter == NULL)
AfxThrowMemoryException();
}
ASSERT(pThreadState->m_hHookOldCbtFilter != NULL);
ASSERT(pWnd != NULL);
ASSERT(pWnd->m_hWnd == NULL); // only do once --就是这个位置错了,不
ASSERT(pThreadState->m_pWndInit == NULL); // hook not already in progress
pThreadState->m_pWndInit = pWnd;
}