| // { 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; |
| } |