Visual c++ 如何在c++;?
我在我的cpp文件中有这个函数定义Visual c++ 如何在c++;?,visual-c++,Visual C++,我在我的cpp文件中有这个函数定义 LRESULT CRebarHandler::onSetRedraw(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { bHandled=false; if (m_ieVer==6){ if (!m_hWndToolbar) scanForToolbarSlow(); } return S_OK; }
LRESULT CRebarHandler::onSetRedraw(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
bHandled=false;
if (m_ieVer==6){
if (!m_hWndToolbar)
scanForToolbarSlow();
}
return S_OK;
}
我的问题是我不知道如何从同一文件中的另一个函数调用它。我想从这个函数调用它:
void CRebarHandler::setButtonMenu2(){
bool b=false;
onSetRedraw(0,0,0,false); <------ is this the correct way?
}
void CRebarHandler::setButtonMenu2(){
布尔b=假;
onSetDraw(0,0,0,false);这一切都取决于函数原型,如果存在带有默认参数的重载,则不需要从函数中提供值。如果没有,则需要所有四个参数
因为两个方法似乎在同一个类中,所以您显示的方法*应该*起作用。是的,按照您定义事物的方式,您必须为所有参数提供值。此外,最后一个参数必须是一个变量,因为您将其定义为通过引用传递
如果在某些情况下,这似乎有点愚蠢,而您只是希望它为您填写所有0和false,那么您可以使用这些值作为默认值提供定义,如下所示:
LRESULT CRebarHandler::onSetRedraw(UINT uMsg=0, WPARAM wParam=0, LPARAM lParam=0, BOOL& bHandled)
{
(注意:您不能为bHandled提供默认值,因为它是通过引用传递的。这表示您的例程想要修改它,因此它必须是一个可修改的变量)
然后你可以这样称呼它:
onSetRedraw(false)
另一种选择是只制作例程的另一个副本,而不包含任何这些参数。如果需要,可以将其设置为私有,这样只有类本身的成员才能调用它。否,最后一个参数是参考值,因此需要提供变量而不是值(为了更加准确,您需要提供左值而不是右值):
正如您的示例所示,必须提供所有参数。但是,可以提供默认参数,这样就不必了。换句话说,C++规则要求您在第一个值之前为最后的参数提供默认参数。s、
我认为你应该重构你的代码。它变得更加可重用。
OnSetDraw函数中几乎没有需要参数的东西,因此从中提取方法更容易
void CRebarHandler::scan()
{
if (m_ieVer==6){
if (!m_hWndToolbar)
scanForToolbarSlow();´
}
}
LRESULT CRebarHandler::onSetRedraw(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
bHandled=false;
scan();
return S_OK;
}
void CRebarHandler::setButtonMenu2()
{
bool b=false;
scan();
}
void CRebarHandler::scan()
{
if (m_ieVer==6){
if (!m_hWndToolbar)
scanForToolbarSlow();´
}
}
LRESULT CRebarHandler::onSetRedraw(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
bHandled=false;
scan();
return S_OK;
}
void CRebarHandler::setButtonMenu2()
{
bool b=false;
scan();
}