Home | History | Annotate | Download | only in jni
      1 // { dg-do run  }
      2 // prms-id: 8155
      3 
      4 int fail = 1;
      5 
      6 class CMainWindow;
      7 class CFrameWnd;
      8 class CWnd;
      9 class CCmdTarget;
     10 
     11 typedef void (CCmdTarget::*AFX_PMSG)( void);
     12 typedef void (CWnd::*AFX_PMSGW)( void);
     13 
     14 struct AFX_MSGMAP_ENTRY {
     15   unsigned int  nMessage;
     16   AFX_PMSG pfn;
     17 };
     18 
     19 struct AFX_MSGMAP {
     20   const AFX_MSGMAP* pBaseMap;
     21   const AFX_MSGMAP_ENTRY* lpEntries;
     22 };
     23 
     24 class CCmdTarget {
     25 public:
     26   CCmdTarget();
     27 private:
     28   static AFX_MSGMAP_ENTRY _messageEntries[];
     29 protected:
     30   static const AFX_MSGMAP messageMap;
     31   virtual const AFX_MSGMAP* GetMessageMap() const;
     32 };
     33 
     34 const   AFX_MSGMAP CCmdTarget::messageMap = {
     35   0, &CCmdTarget::_messageEntries[0]
     36 };
     37 
     38 const AFX_MSGMAP* CCmdTarget::GetMessageMap() const {
     39   return &CCmdTarget::messageMap;
     40 }
     41 
     42 AFX_MSGMAP_ENTRY CCmdTarget::_messageEntries[] =
     43 {
     44   { 0, 0 }
     45 };
     46 
     47 CCmdTarget :: CCmdTarget() { }
     48 
     49 class CWnd : public CCmdTarget {
     50 public:
     51   CWnd();
     52 
     53 protected:
     54   void OnPaint();
     55 private:
     56   static AFX_MSGMAP_ENTRY _messageEntries[];
     57 protected:
     58   static   const AFX_MSGMAP messageMap;
     59   virtual const AFX_MSGMAP* GetMessageMap() const;
     60 };
     61 
     62 CWnd :: CWnd() {
     63 }
     64 
     65 void CWnd :: OnPaint() {
     66 }
     67 
     68 const AFX_MSGMAP*   CWnd ::GetMessageMap() const {
     69   return &  CWnd ::messageMap;
     70 }
     71 const AFX_MSGMAP   CWnd ::messageMap = {
     72   &  CCmdTarget ::messageMap, &  CWnd ::_messageEntries[0]
     73   };
     74 AFX_MSGMAP_ENTRY   CWnd ::_messageEntries[] = {
     75   {0, (AFX_PMSG)0 } };
     76 
     77 class CFrameWnd : public CWnd {
     78 public:
     79   CFrameWnd();
     80 protected:
     81 private:
     82   static AFX_MSGMAP_ENTRY _messageEntries[];
     83 protected:
     84   static   const AFX_MSGMAP messageMap;
     85   virtual const AFX_MSGMAP* GetMessageMap() const;
     86 };
     87 
     88 CFrameWnd :: CFrameWnd() { }
     89 
     90 const AFX_MSGMAP*   CFrameWnd ::GetMessageMap() const {
     91   return &  CFrameWnd ::messageMap;
     92 }
     93 const AFX_MSGMAP   CFrameWnd ::messageMap = {
     94   &  CWnd ::messageMap, &  CFrameWnd ::_messageEntries[0]
     95   };
     96 AFX_MSGMAP_ENTRY   CFrameWnd ::_messageEntries[] = {
     97   {0, (AFX_PMSG)0 } };
     98 
     99 class CMainWindow : public CFrameWnd {
    100 public:
    101   CMainWindow();
    102   void OnPaint();
    103   void callProc();
    104 private:
    105   static AFX_MSGMAP_ENTRY _messageEntries[];
    106 protected:
    107   static   const AFX_MSGMAP messageMap;
    108   virtual const AFX_MSGMAP* GetMessageMap() const;
    109 };
    110 
    111 CMainWindow :: CMainWindow()
    112 {
    113 }
    114 void CMainWindow :: OnPaint()
    115 {
    116   fail = 0;
    117 }
    118 
    119 void CMainWindow :: callProc()
    120 {
    121   const AFX_MSGMAP* pMessageMap;
    122   const AFX_MSGMAP_ENTRY *lpEntry;
    123 
    124   pMessageMap = GetMessageMap();
    125   lpEntry = pMessageMap->lpEntries;
    126 
    127   if( lpEntry->nMessage == 100) {
    128     (this->*lpEntry->pfn)();
    129   }
    130 }
    131 
    132 const AFX_MSGMAP*   CMainWindow ::GetMessageMap() const {
    133   return &  CMainWindow ::messageMap;
    134 }
    135 const AFX_MSGMAP   CMainWindow ::messageMap = {
    136   &  CFrameWnd ::messageMap, &  CMainWindow ::_messageEntries[0]
    137   };
    138 AFX_MSGMAP_ENTRY   CMainWindow ::_messageEntries[] = {
    139   { 100, (AFX_PMSG)(AFX_PMSGW)(void (CWnd::*)(void))&CMainWindow::OnPaint },
    140   {0, (AFX_PMSG)0 }
    141 };
    142 
    143 int main( int argc, char **argv) {
    144   CMainWindow     myWindow;
    145 
    146   myWindow.callProc();
    147   return fail;
    148 }
    149