CWnd是框架类,你把它当成CView类使用了吧
解决方案 »
- listen会一直有效吗?
- VC中如何把SOCKET中接收的字符数组显示在列表视图中
- 使用Detours截获什么函数可以获得当前页面地址栏里的URL?
- 守护线程如何正常推出?
- FreeLibrary()/AfxFreeLibrary()把dll怎么了?
- VC 的ouput文本框究竟是什么控件?edit,richedit还是listbox?
- 请问一下CCriticalSection的用法
- 用命令行如何给文件名加时间后缀? 比如: >copy C:\tt.txt tt_$time$.txt 文件名字改为 tt_2-5-7-1.txt
- COM 中的函数如何才能返回一个CBitmap类型的值,请有兴趣的朋友多参与。
- 程序连接时出错,帮我看看
- 大虾帮忙,我的分割窗口的代码为什么达不到要求?帮我看看吧。
- 怎样在MSDBGRID中删除一个记录?
// panes can be a CWnd, but are usually CViews
所以这样用是对的吧
这些程序在一个demo中运正确,
不过当我加入自己的工程出现这种错误
我已经对比过源程序,这部分都一行,
估计是该改的没改??!
我已经对比过源程序,这部分都一样,
file name: rt_demo.zip
试试rebuild all.
请发一份代码给我。
D:\code\diblook2000.12.26\RTForm.cpp(84) : error C2065: 'IdFromRowCol' : undeclared identifier
我不太明白你的意思,请讲明白一点。这个程序demo是没错的,我放到自己的程序时出错,
那个window是这样的,上面是一个CRealTimeView,
下面是一个RTForm(base class is CFormView)
中间是个CSplitterWnd分开,
还有几个控件在下面的form上,
我不太清楚那个assert错是哪里引起的.
demo在www.vchelp.net上有
http://vchelp.163.net/source/realtime_plot.zip
我的意思是你在自己的函数里按MFC的方法实现的GetPane的功能,看其返回值如何再判断出错原因。
出错时,查菜单view->Debug Windows->Call Stack看一下函数调用栈,将里面的函数调用关系列出来看看.
KERNEL32! bff76920()
_CrtDbgReport(int 2, const char * 0x5f4cd8a0 THIS_FILE, int 349, const char * 0x00000000, const char * 0x00000000) line 353
AfxAssertFailedLine(const char * 0x5f4cd8a0 THIS_FILE, int 349) line 39 + 20 bytes
CSplitterWnd::IdFromRowCol(int 1, int 0) line 349 + 26 bytes
CSplitterWnd::GetPane(int 1, int 0) line 363 + 16 bytes
CRealTimeView::GetRTForm() line 174
我看不太懂 :(
我的程序是这样的
void CRTForm::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
m_SliderPage.SetType(m_SliderPage.sType::PAGE);
m_SliderPage.GetClientRect(m_sRect);
m_SliderPage.SetRange(0, 1, TRUE);
//m_SliderPage.SetTic(1);
m_SliderPage.SetPos(1);
m_SliderPage.SetPageSize(1);
m_SliderPage.EnableWindow(FALSE);
MoveWindows();
那个函数在MoveWindows()中以下是MoveWindows()void CRTForm::MoveWindows()
{
CRect rect;
GetClientRect(rect); CWnd* pView = GetRealTimeView();
RECT& plotRect = ((CRealTimeView*)pView)->GetGraphRect();
if (plotRect.right - plotRect.left > 0)
{
m_sRect.left = plotRect.left - 10;
m_sRect.right = plotRect.right + 10;
m_SliderPage.MoveWindow(m_sRect);
}
else
{
m_sRect.left = rect.left;
m_sRect.right = rect.right;
m_SliderPage.MoveWindow(m_sRect);
} rect.top = m_sRect.top + m_sRect.Height();
m_RTGrid.MoveWindow(rect);
}你可以down一下demo看看,我的与demo没什么区别,
我没有改写GetClientRect(rect);
这是mfc的函数
问题出在pWnd->GetPane(0, 0)上,这时候你的第一个pane(0,0)还没有初始化(即m_hWnd = NULL)。你的OnCreateClient写法估计有问题。另外,好像不需要在OnInitialUpdate里移动窗体吧,在OnSize里处理才是正确的(你是不是vb用多了,什么代码都放到Form_Load里去)。
我说的是OnCreateClient重载函数,不是GetClientRect!!!
十有八九你的重载写的有点问题!