Click here to Skip to main content
15,920,438 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
My code is ok, the problem is that it said "Debug assertion failed" when I clicked the pictures (the first three pictures of the first row ). confusing .....

C++
#include   <afx.h>
#include   <stdio.h>
#include <windows.h>
#include <winuser.h>
#define  WM_MYTIMER WM_USER+100
#ifndef _CGPSVIEW__H_
#define _CGPSVIEW__H_

static POINT pt;
static POINT pt1[2];
static  int ms=0;
static  int n=0;
static  int    m[2]={-1,-1};
static  int k;
static  int c,d;
HRGN hRgn[4][4];


class CGpsView
{

private:
    DWORD m_dwDibSize;
    unsigned char *m_pDib, *m_pDibBits;
    BITMAPINFOHEADER *m_pBIH;

    RGBQUAD *m_pPalette;
    int m_nPaletteEntries;


public:
    CGpsView();
    ~CGpsView();
public:
    BOOL   LoadBmp(char *pzFilename); //读取显示图像
    BOOL   DrawBmp(HDC hdc, int x, int y, int width, int height);
    UINT m_width, m_height;


};

#endif



CGpsView::CGpsView()
{
    m_pDib = NULL;

}
CGpsView::~CGpsView()
{
    if(m_pDib)
    {
        delete [] m_pDib;
        m_pDib = NULL;
    }

}
BOOL CGpsView::LoadBmp(char *pzFilename)

{
    CFile cf;
    if(!cf.Open(pzFilename, CFile::modeRead))
        return FALSE;

    DWORD dwDibSize;
    dwDibSize = cf.GetLength() - sizeof(BITMAPFILEHEADER);

    unsigned char *pDib;
    pDib = new unsigned char[dwDibSize];
    if(pDib == NULL)
        return FALSE;

    BITMAPFILEHEADER BFH;
    // 读取文件头和数据
    try
    {
        if(cf.Read(&BFH, sizeof(BITMAPFILEHEADER))!=sizeof(BITMAPFILEHEADER)||
            BFH.bfType!='MB'||
            cf.Read(pDib, dwDibSize)!=dwDibSize)
        {
            delete [] pDib;
            pDib = NULL;
            return FALSE;
        }
    }
    catch(CFileException *e)
    {
        e->Delete();
        delete [] pDib;
        pDib = NULL;
        return FALSE;
    }

    if(m_pDib)
    {
        delete [] m_pDib;
        m_pDib = NULL;
    }
    m_pDib = pDib;
    m_dwDibSize = dwDibSize;

    // BITMAPINFOHEADER and RGBQUAD 地址
    m_pBIH = (BITMAPINFOHEADER*)m_pDib;
    //m_pPalette = (RGBQUAD *) &m_pDib[sizeof(BITMAPINFOHEADER)];

    //  宽 高
    m_width = m_pBIH->biWidth;
    m_height = m_pBIH->biHeight;

    m_nPaletteEntries = 1 << m_pBIH->biBitCount;
    if( m_pBIH->biBitCount > 8 )
        m_nPaletteEntries = 0;
    else if( m_pBIH->biClrUsed != 0 )
        m_nPaletteEntries = m_pBIH->biClrUsed;

    //  m_pDibBits 地址
    m_pDibBits =
        &m_pDib[sizeof(BITMAPINFOHEADER)+
            m_nPaletteEntries*sizeof(RGBQUAD)];

    return TRUE;
}

BOOL CGpsView::DrawBmp(HDC hdc, int x, int y, int width, int height)
{
    if(!m_pDib)
        return FALSE;
    //BitBlt(hdc, x, y, width, height, memdc, 0, 0, SRCCOPY);
    StretchDIBits(hdc, x, y, width, height,
        0, 0, m_width, m_height, m_pDibBits,
        (BITMAPINFO *) m_pBIH, BI_RGB, SRCCOPY);
    return TRUE;

}

CGpsView   cgpsview1,cgpsview2;
CString    szFileName00,szFileName01,szFileName02,
                szFileName03,szFileName1[8],szFileName2[16];



LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
VOID CALLBACK MyTimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime);
 int getNum(int arrNum[],int P);



int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("HelloWin") ;
     HWND         hwnd ;
     MSG          msg ;
     WNDCLASS     wndclass ;

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;

     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }

     hwnd = CreateWindow (szAppName,                  // window class name
                          TEXT ("The Hello Program"), // window caption
                          WS_OVERLAPPEDWINDOW,        // window style
                          CW_USEDEFAULT,              // initial x position
                          CW_USEDEFAULT,              // initial y position
                          CW_USEDEFAULT,              // initial x size
                          CW_USEDEFAULT,              // initial y size
                          NULL,                       // parent window handle
                          NULL,                       // window menu handle
                          hInstance,                  // program instance handle
                          NULL) ;                     // creation parameters



     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;


     while (GetMessage (&msg, NULL, 0, 0))
     {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
     }
     return msg.wParam ;
}



LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{




     HDC       hdc ;
     PAINTSTRUCT ps ;


     int arrNum[16];
     int   a[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
     int   b[16];
     int*      p;


     int i,j;


     szFileName00="F:\\我的代码\\shishi5\\00.bmp";
     szFileName01="F:\\我的代码\\shishi5\\01.bmp";
     szFileName02="F:\\我的代码\\shishi5\\02.bmp";
     szFileName03="F:\\我的代码\\shishi5\\03.bmp";

     szFileName1[0]="F:\\我的代码\\shishi5\\1.bmp";
     szFileName1[1]="F:\\我的代码\\shishi5\\2.bmp";
     szFileName1[2]="F:\\我的代码\\shishi5\\3.bmp";
     szFileName1[3]="F:\\我的代码\\shishi5\\4.bmp";
     szFileName1[4]="F:\\我的代码\\shishi5\\5.bmp";
     szFileName1[5]="F:\\我的代码\\shishi5\\6.bmp";
     szFileName1[6]="F:\\我的代码\\shishi5\\7.bmp";
     szFileName1[7]="F:\\我的代码\\shishi5\\8.bmp";




     switch (message)
     {
     case WM_CREATE:





       srand(   (unsigned)time(   NULL   )   );

       b[0]= rand()%16;       //b[0]为0~15之间的随机数
       p=&b[0];

         for( c=1; c <16;c++)
         {

              b[c]=rand()%16;

                 for( d=0;d <c;d++)   //如果跟前面有一样的就不要,重新取
                 {
                        if(b[c]   ==   b[d])
                        {
                                c--;
                                break;
                        }
                 }
         }
            for( k=0;k<8;k++)

            {
              szFileName2[*p]=szFileName1[k];
              szFileName2[*(p+1)]=szFileName1[k];
              p=p+2;

            }



          InvalidateRect(hwnd,NULL,TRUE);

          return 0 ;

     case WM_PAINT:

         hdc=BeginPaint(hwnd,&ps);


         for(i=0;i<4;i++)
         for(j=0;j<4;j++)

         {
            hRgn[i][j]=CreateRectRgn(j*500/3+10*(j+1),i*500/3,(j+1)*500/3+10*(j+1),(i+1)*500/3);

            cgpsview1.LoadBmp((LPTSTR)(LPCTSTR)szFileName00);

            cgpsview1.DrawBmp( hdc,j*500/3+10*(j+1),i*500/3,500/3,500/3);

         }
         EndPaint(hwnd,&ps);

         return 0 ;

    case WM_LBUTTONDOWN:


        pt.x=LOWORD(lParam);
        pt.y=HIWORD(lParam);


        SetTimer(hwnd,WM_MYTIMER,500,MyTimerProc);

        hdc = GetDC (hwnd) ;

        ReleaseDC (hwnd, hdc) ;
          break;

    case WM_DESTROY:
          KillTimer(hwnd,WM_MYTIMER);
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}

 VOID CALLBACK MyTimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
 {

     HDC hdc;



     hdc=GetDC(hwnd);


     int i=0,j=0,l;
        for( ;!(PtInRegion(hRgn[i][j],pt.x,pt.y));j++)
       {
          if(j==3)
          {
           i++;
           j=0;
          }
       }
       l=4*i+j;

       if(ms==0)
       {

      cgpsview1.LoadBmp((LPTSTR)(LPCTSTR)szFileName01);
      cgpsview1.DrawBmp( hdc,j*500/3+10*(j+1),i*500/3,500/3,500/3);
       }
      if(ms==1)
       {

      cgpsview1.LoadBmp((LPTSTR)(LPCTSTR)szFileName02);
      cgpsview1.DrawBmp( hdc,j*500/3+10*(j+1),i*500/3,500/3,500/3);
       }
      if(ms==2)
       {

      cgpsview1.LoadBmp((LPTSTR)(LPCTSTR)szFileName2[l]);
      cgpsview1.DrawBmp( hdc,j*500/3+10*(j+1),i*500/3,500/3,500/3);
                pt1[n].x=j*500/3+10*(j+1);
                pt1[n].y=i*500/3;
                m[n]=l;
                n++;

       }

     if(ms==3)
      {
        KillTimer(hwnd,WM_MYTIMER);

        ms=-1;

      }

       ms++;
         if(m[0]!=-1&&m[1]!=-1)
         {

       int value1= m[n-2];
       int value2 = m[n-1];


       if(szFileName2[value1].Compare(szFileName2[value2])==0)
       {
          Sleep(500);
        cgpsview1.LoadBmp((LPTSTR)(LPCTSTR)szFileName03);
        cgpsview1.DrawBmp( hdc,pt1[n-2].x,pt1[n-2].y,500/3,500/3);
        cgpsview1.DrawBmp( hdc,pt1[n-1].x,pt1[n-1].y,500/3,500/3);
        m[0]=-1;
        m[1]=-1;
        n=0;
       }
       else
       {
           Sleep(500);
        cgpsview1.LoadBmp((LPTSTR)(LPCTSTR)szFileName00);
        cgpsview1.DrawBmp( hdc,pt1[n-2].x,pt1[n-2].y,500/3,500/3);
        cgpsview1.DrawBmp( hdc,pt1[n-1].x,pt1[n-1].y,500/3,500/3);
        m[0]=-1;
        m[1]=-1;
        n=0;
       }

         }
 }
Posted
Updated 28-May-10 1:19am
v2
Comments
R. Giskard Reventlov 28-May-10 5:56am    
Whatever your issue I doubt that anyone will be bothered to wade through all of your code: you should only post the fragment that is the issue and if anyone needs more they will ask.

Nobody is going to dig into your code to find the problem in such amount of code. Try posting only relevant code.
Furthermore, when something like that happens, your first reflex should be to use your debugger to narrow down the problem. You'll get much faster results than asking a question on a forum.
 
Share this answer
 
{ if(cf.Read(&BFH, sizeof(BITMAPFILEHEADER))!=sizeof(BITMAPFILEHEADER)||
BFH.bfType!='MB'||
cf.Read(pDib, dwDibSize)!=dwDibSize)
{
delete [] pDib;
pDib = NULL;
return FALSE;
}
}
在 try 中的 BFH.bfType!='MB' 应该 改为 BFH.bfType!='BM'
 
Share this answer
 
cgpsview1.LoadBmp((LPTSTR)(LPCTSTR)szFileName00);

u can change :
eg

cgpsview1.LoadBmp(szFileName00.c_str());
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900