hur.cn - 华软网

 热门搜索

OnDraw 、状态栏 代码问题疑问

  作者:未知    来源:网络    更新时间:2011/8/14
恶补vc中,遇到几个问题:

XXView.cpp中看到行代码,,,查了一下,不是很懂:



void CTest2View::OnDraw(CDC* pDC)
{
CTest2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}



问题:

ASSERT_VALID(pDoc);    //这个宏意思是判断合法,但是我猜测死 debug版本才有的宏吧?

是不是debug, 是看有没有定义_DEBUG? 但是我发现,在View.cpp的下方有这么几行代码


#ifdef _DEBUG
void CTest2View::AssertValid() const
{
CView::AssertValid();
}

void CTest2View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}

CTest2Doc* CTest2View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTest2Doc)));
return (CTest2Doc*)m_pDocument;
}
#endif //_DEBUG


那就说明: ASSERT_VALID  无论什么版本下面都有效!!!!!!! , 这就和我说的矛盾了??



问题2: 多文档状态栏的编程问题

在View的OnDraw函数中:

CTime time=CTime::GetCurrentTime();

CString sTime=time.Format(" %T: %M: %p");

CStatusBar*  pStatusBar=(CStatusBar*) AfxGetApp()->m_pMainWnd->GetDescendantWindow(ID_VIEW_STATUS_BAR);

pStatusBar->SetPaneText(4,sTime);


indicators数组我加了一个,所以有4个,程序可以运行,结果我发现 右下角 看不到小时,只能看到时间, 估计是被隐藏了,太小了,导致的,

我该如何做?


---华软 网友回答---
木有人啊 
---华软网友回复---
要让你的时间字符串能完全显示,最简单的就是在   字符串资源中你的状态栏那把它的初始值设为00:00:00   或者长度大于要显示的字符串即可,也可以调用  SetPaneInfo等函数去设置
---华软网友回复---
你好,那么第一个问题,能帮忙解决一下吗?

引用 2 楼 agoago_2009 的回复:
要让你的时间字符串能完全显示,最简单的就是在   字符串资源中你的状态栏那把它的初始值设为00:00:00   或者长度大于要显示的字符串即可,也可以调用  SetPaneInfo等函数去设置

---华软网友回复---
有没有人 ,救命啊 
---华软网友回复---
SSERT_VALID
ASSERT_VALID( pObject )

Parameters

pObject

Specifies an object of a class derived from CObject that has an overriding version of the AssertValid member function.
Remarks

Use to test your assumptions about the validity of an object’s internal state. ASSERT_VALID calls the AssertValid member function of the object passed as its argument. 

In the Release version of MFC, ASSERT_VALID does nothing. In the Debug version, it validates the pointer, checks against NULL, and calls the object’s own AssertValid member functions. If any of these tests fails, this displays an alert message in the same manner as ASSERT.

Note   This function is available only in the Debug version of MFC
MSDN中说只在DEBUG下起作用。
在RELEASE下它并没有弹出消息,只是说参数不合适罢了,应该是系统自己的纠错
---华软网友回复---
是不是这样理解

dibug,release下都有这个宏,但是只是 debug下起作用


而下面几个函数,只有debug下面有,release没有
#ifdef _DEBUG
void CTest2View::AssertValid() const
{
CView::AssertValid();
}

void CTest2View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}

CTest2Doc* CTest2View::GetDocument() // non-debug version is inline
{
.....................................
}
#endif //_DEBUG


引用 5 楼 zyrr159487 的回复:
SSERT_VALID
ASSERT_VALID( pObject )

Parameters

pObject

Specifies an object of a class derived from CObject that has an overriding version of the AssertValid member function.
Remarks

Use……

---华软网友回复---
是的,从MSDN的意思就是在RELEASE下它上面都不做,而在DEBUG下则会调用这一部分的函数
---华软网友回复---
多谢,时间到,我就结贴,非常感谢 黑白同志  
引用 7 楼 zyrr159487 的回复:
是的,从MSDN的意思就是在RELEASE下它上面都不做,而在DEBUG下则会调用这一部分的函数
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。