#define AFTER_DRAW_TOPLEFT WM_USER+100struct NMTOPLEFT_DRAW: public NMHDR {
CRect rect;
CDC* pDC;
};class A: public CDialog
{
afx_msg void OnAfterDrawTopLeft ( NMTOPLEFT_DRAW* nminfo, LRESULT* pRes );
}BEGIN_MESSAGE_MAP(A, CDialog)
//{{AFX_MSG_MAP(COptionDlg)
//}}AFX_MSG_MAP
ON_NOTIFY(AFTER_DRAW_TOPLEFT, IDC_STATIC_CHART,OnAfterDrawTopLeft)
END_MESSAGE_MAP()error C2440: “static_cast” : 无法从“void (__thiscall A::* )(NMSQUARE *,LRESULT *)”转换为“void (__thiscall CCmdTarget::* )(NMHDR *,LRESULT *)”
在匹配目标类型的范围内没有具有该名称的函数,大家帮我分析分析,结构的继承在.NET下是没有问题的!事例如下:
#pragma once
#include <iostream>
using namespace std;
struct AA
{
int a;
int b;
};
class father
{
public:
father(void);
~father(void); void SetFather(){cout<<"This is father!"<<endl;}
};
#pragma once
#include "father.h"
struct BB :public AA
{
int c;
};
class ezi :
public father
{
public:
ezi(void);
~ezi(void);
};
#pragma once
#include "father.h"
class Test
{
public:
Test(void);
~Test(void);
void SetFa(father *ms){ms->SetFather();}
void SetStruct(AA *sd){cout<<"this is sdfsf!"<<endl;}
};
#include "stdafx.h"
#include "Test.h"
#include "ezi.h"
int _tmain(int argc, _TCHAR* argv[])
{
ezi m_ezi;
Test m_test;
BB S;
m_test.SetFa(&m_ezi);
m_test.SetStruct(&S);
getchar();
return 0;
}
正常运行!问题可能出在static_cast<>()类型转换这里!但是我还是不能解决……
CRect rect;
CDC* pDC;
};class A: public CDialog
{
afx_msg void OnAfterDrawTopLeft ( NMTOPLEFT_DRAW* nminfo, LRESULT* pRes );
}BEGIN_MESSAGE_MAP(A, CDialog)
//{{AFX_MSG_MAP(COptionDlg)
//}}AFX_MSG_MAP
ON_NOTIFY(AFTER_DRAW_TOPLEFT, IDC_STATIC_CHART,OnAfterDrawTopLeft)
END_MESSAGE_MAP()error C2440: “static_cast” : 无法从“void (__thiscall A::* )(NMSQUARE *,LRESULT *)”转换为“void (__thiscall CCmdTarget::* )(NMHDR *,LRESULT *)”
在匹配目标类型的范围内没有具有该名称的函数,大家帮我分析分析,结构的继承在.NET下是没有问题的!事例如下:
#pragma once
#include <iostream>
using namespace std;
struct AA
{
int a;
int b;
};
class father
{
public:
father(void);
~father(void); void SetFather(){cout<<"This is father!"<<endl;}
};
#pragma once
#include "father.h"
struct BB :public AA
{
int c;
};
class ezi :
public father
{
public:
ezi(void);
~ezi(void);
};
#pragma once
#include "father.h"
class Test
{
public:
Test(void);
~Test(void);
void SetFa(father *ms){ms->SetFather();}
void SetStruct(AA *sd){cout<<"this is sdfsf!"<<endl;}
};
#include "stdafx.h"
#include "Test.h"
#include "ezi.h"
int _tmain(int argc, _TCHAR* argv[])
{
ezi m_ezi;
Test m_test;
BB S;
m_test.SetFa(&m_ezi);
m_test.SetStruct(&S);
getchar();
return 0;
}
正常运行!问题可能出在static_cast<>()类型转换这里!但是我还是不能解决……
解决方案 »
- MFC SDI 中 CreateNewFrame 创建新窗口问题
- 关于CString的Left方法问题
- 为什么没有exe文件
- 请问
- 用vc开发数据库应用程序有什么优势吗?后台用的是oracle数据库。
- VC程序调用了VB程序,VC先运行,到了VB的地方执行VB程序,然后继续VC后面的程序,怎么能控制顺序执行完VC
- CString->char* 或 char[] 、char*或char[]-->CString
- 请教在编程控制odbc数据源中碰到的问题
- 那里有用C或C++编写的计算方差等函数啊
- 请教:一个ftp程序,匿名登陆,用何密码?(我已试过guest以及邮箱地址)
- 如何获取网卡的物理MAC地址
- 字符串格式化问题?
改成OnAfterDrawTopLeft ( NMHDR * nminfo, LRESULT* pRes )
在OnAfterDrawTopLeft 函数体内,将NMHDR* 再转化成NMTOPLEFT_DRAW*但是你程序发送消息的时候要用NMTOPLEFT_DRAW*
->
afx_msg LRESULT OnAfterDrawTopLeft
{ WM_NOTIFY, (WORD)(int)wNotifyCode, (WORD)id, (WORD)id, AfxSigNotify_v, \
(AFX_PMSG) \
(static_cast< void (AFX_MSG_CALL CCmdTarget::*)(NMHDR*, LRESULT*) > \
(memberFxn)) },返回值为VOID哦!如果改为LRESULT ,typedef LONG_PTR LRESULT;会报错的哦……
=>
afx_msg void OnAfterDrawTopLeft ( NMHDR nminfo, LRESULT* pRes );2.需要在类的定义中写上DECLARE_MESSAGE_MAP
afx_msg void OnAfterDrawTopLeft ( NMHDR nminfo, LRESULT* pRes );
=>
afx_msg void OnAfterDrawTopLeft ( LPNMHDR nminfo, LRESULT* pRes );