149 lines
2.9 KiB
C
149 lines
2.9 KiB
C
// { dg-do run }
|
|
// prms-id: 8155
|
|
|
|
int fail = 1;
|
|
|
|
class CMainWindow;
|
|
class CFrameWnd;
|
|
class CWnd;
|
|
class CCmdTarget;
|
|
|
|
typedef void (CCmdTarget::*AFX_PMSG)( void);
|
|
typedef void (CWnd::*AFX_PMSGW)( void);
|
|
|
|
struct AFX_MSGMAP_ENTRY {
|
|
unsigned int nMessage;
|
|
AFX_PMSG pfn;
|
|
};
|
|
|
|
struct AFX_MSGMAP {
|
|
const AFX_MSGMAP* pBaseMap;
|
|
const AFX_MSGMAP_ENTRY* lpEntries;
|
|
};
|
|
|
|
class CCmdTarget {
|
|
public:
|
|
CCmdTarget();
|
|
private:
|
|
static AFX_MSGMAP_ENTRY _messageEntries[];
|
|
protected:
|
|
static const AFX_MSGMAP messageMap;
|
|
virtual const AFX_MSGMAP* GetMessageMap() const;
|
|
};
|
|
|
|
const AFX_MSGMAP CCmdTarget::messageMap = {
|
|
0, &CCmdTarget::_messageEntries[0]
|
|
};
|
|
|
|
const AFX_MSGMAP* CCmdTarget::GetMessageMap() const {
|
|
return &CCmdTarget::messageMap;
|
|
}
|
|
|
|
AFX_MSGMAP_ENTRY CCmdTarget::_messageEntries[] =
|
|
{
|
|
{ 0, 0 }
|
|
};
|
|
|
|
CCmdTarget :: CCmdTarget() { }
|
|
|
|
class CWnd : public CCmdTarget {
|
|
public:
|
|
CWnd();
|
|
|
|
protected:
|
|
void OnPaint();
|
|
private:
|
|
static AFX_MSGMAP_ENTRY _messageEntries[];
|
|
protected:
|
|
static const AFX_MSGMAP messageMap;
|
|
virtual const AFX_MSGMAP* GetMessageMap() const;
|
|
};
|
|
|
|
CWnd :: CWnd() {
|
|
}
|
|
|
|
void CWnd :: OnPaint() {
|
|
}
|
|
|
|
const AFX_MSGMAP* CWnd ::GetMessageMap() const {
|
|
return & CWnd ::messageMap;
|
|
}
|
|
const AFX_MSGMAP CWnd ::messageMap = {
|
|
& CCmdTarget ::messageMap, & CWnd ::_messageEntries[0]
|
|
};
|
|
AFX_MSGMAP_ENTRY CWnd ::_messageEntries[] = {
|
|
{0, (AFX_PMSG)0 } };
|
|
|
|
class CFrameWnd : public CWnd {
|
|
public:
|
|
CFrameWnd();
|
|
protected:
|
|
private:
|
|
static AFX_MSGMAP_ENTRY _messageEntries[];
|
|
protected:
|
|
static const AFX_MSGMAP messageMap;
|
|
virtual const AFX_MSGMAP* GetMessageMap() const;
|
|
};
|
|
|
|
CFrameWnd :: CFrameWnd() { }
|
|
|
|
const AFX_MSGMAP* CFrameWnd ::GetMessageMap() const {
|
|
return & CFrameWnd ::messageMap;
|
|
}
|
|
const AFX_MSGMAP CFrameWnd ::messageMap = {
|
|
& CWnd ::messageMap, & CFrameWnd ::_messageEntries[0]
|
|
};
|
|
AFX_MSGMAP_ENTRY CFrameWnd ::_messageEntries[] = {
|
|
{0, (AFX_PMSG)0 } };
|
|
|
|
class CMainWindow : public CFrameWnd {
|
|
public:
|
|
CMainWindow();
|
|
void OnPaint();
|
|
void callProc();
|
|
private:
|
|
static AFX_MSGMAP_ENTRY _messageEntries[];
|
|
protected:
|
|
static const AFX_MSGMAP messageMap;
|
|
virtual const AFX_MSGMAP* GetMessageMap() const;
|
|
};
|
|
|
|
CMainWindow :: CMainWindow()
|
|
{
|
|
}
|
|
void CMainWindow :: OnPaint()
|
|
{
|
|
fail = 0;
|
|
}
|
|
|
|
void CMainWindow :: callProc()
|
|
{
|
|
const AFX_MSGMAP* pMessageMap;
|
|
const AFX_MSGMAP_ENTRY *lpEntry;
|
|
|
|
pMessageMap = GetMessageMap();
|
|
lpEntry = pMessageMap->lpEntries;
|
|
|
|
if( lpEntry->nMessage == 100) {
|
|
(this->*lpEntry->pfn)();
|
|
}
|
|
}
|
|
|
|
const AFX_MSGMAP* CMainWindow ::GetMessageMap() const {
|
|
return & CMainWindow ::messageMap;
|
|
}
|
|
const AFX_MSGMAP CMainWindow ::messageMap = {
|
|
& CFrameWnd ::messageMap, & CMainWindow ::_messageEntries[0]
|
|
};
|
|
AFX_MSGMAP_ENTRY CMainWindow ::_messageEntries[] = {
|
|
{ 100, (AFX_PMSG)(AFX_PMSGW)(void (CWnd::*)(void))&CMainWindow::OnPaint },
|
|
{0, (AFX_PMSG)0 }
|
|
};
|
|
|
|
int main( int argc, char **argv) {
|
|
CMainWindow myWindow;
|
|
|
|
myWindow.callProc();
|
|
return fail;
|
|
}
|