Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Lập trình chuyển động trên VC++ | Tạo một lá cờ bay trên VC++?

  1. #1
    Ngày gia nhập
    05 2009
    Bài viết
    2

    Mặc định Lập trình chuyển động trên VC++ | Tạo một lá cờ bay trên VC++?

    Các bạn giúp mình bài vẽ lá cờ vn bay với,mình đang chuẩn bị làm bài này nhưng chưa có định hướng nào hít

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bạn đang làm pure api, mfc hay cái gì khác ? Mình xin nêu ý tưởng làm lá cờ bay như sau : nối các ellipse lại với nhau thành hình chữ nhật để tạo ra lá cờ đang dợn sóng. Sau đó bạn đổi thông số của các ellipse thì lá cờ sẽ dợn sóng kiểu khác giống như nó đang bay.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    10 2008
    Nơi ở
    Quảng Trị
    Bài viết
    369

    He he, mình mới thử làm nhưng chưa vẻ ngôi sao :P
    Gọi thủ tục này trong sự kiện WM_PAINT

    Visual C++ Code:
    1. void VeCo(HWND hWnd)
    2. {
    3.     HDC hdc, hMemDC;
    4.     HBITMAP hBitmap, oBitmap;
    5.     RECT rc;
    6.     int y;
    7.     static unsigned char t = 0;
    8.    
    9.     hdc = GetDC(hWnd);
    10.     hMemDC = CreateCompatibleDC(hdc);
    11.     GetClientRect(hWnd, &rc);
    12.    
    13.     hBitmap = CreateCompatibleBitmap(hdc, rc.right - rc.left, rc.bottom - rc.top);
    14.     oBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
    15.    
    16.     FillRect(hMemDC, &rc, (HBRUSH)GetBkColor(hMemDC));
    17.     for (int x = 10; x <= 200; ++x)
    18.     {  
    19.         y = (int)(float)(20.0*cos(2.0*PI*(t/100.0 - x/200.0)) + 50);
    20.         SetPixel(hMemDC, x, y, RGB(0, 0, 0));
    21.         if ((x == 10)||(x == 200))
    22.         {
    23.             MoveToEx(hMemDC, x, y, NULL);
    24.             LineTo(hMemDC, x, y + 150);
    25.         }
    26.         SetPixel(hMemDC, x, y + 150, RGB(0, 0, 0));
    27.     }
    28.     BitBlt(hdc, 0, 0, rc.right - rc.left, rc.bottom - rc.top, hMemDC, 0, 0, SRCCOPY);
    29.     Sleep(10);
    30.     SelectObject(hMemDC, oBitmap);
    31.     DeleteDC(hMemDC);
    32.     DeleteObject(hBitmap);
    33.     ReleaseDC(hWnd, hdc);
    34.     t = (t > 100)? (0) : (t + 1);
    35. }
    Born to walk against the wind... Born to hear my name...
    Stand and fight... Live by your heart...
    Always one more try... I'm not afraid to die...
    Stand and fight... say what you feel...
    Born with a heart of steel ...

  4. #4
    Ngày gia nhập
    05 2009
    Bài viết
    1

    nếu chỉ là lá cờ vn bình thường thì code có dễ hơn không, cho minh code với

  5. #5
    Ngày gia nhập
    05 2009
    Bài viết
    2

    Wink Vẽ lá cờ VN bay

    Mình đã vẽ xong lá cờ chuyển động rồi nhưng chưa bít thêm ngôi sao và canh tọa độ để nó chuyển động cùng với lá cờ ra sao,các bạn giúp mình code với !!!
    Đây là code của mình ,các bạn thêm vào giúp mình nha,code chạy tốt nhất trên DevC++


    Visual C++ Code:
    1. HDC         hDC=NULL;       // Private GDI Device Context
    2. HGLRC       hRC=NULL;       // Permanent Rendering Context
    3. HWND        hWnd=NULL;      // Holds Our Window Handle
    4. HINSTANCE   hInstance;      // Holds The Instance Of The Application
    5.  
    6. bool    keys[256];          // Array Used For The Keyboard Routine
    7. bool    active=TRUE;        // Window Active Flag Set To TRUE By Default
    8. bool    fullscreen=TRUE;    // Fullscreen Flag Set To Fullscreen Mode By Default
    9.  
    10. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);   // Declaration For WndProc
    11.  
    12. GLvoid ReSizeGLScene(GLsizei width, GLsizei height)     // Resize And Initialize The GL Window
    13. {
    14.     if (height==0)                                      // Prevent A Divide By Zero By
    15.     {
    16.         height=1;                                       // Making Height Equal One
    17.     }
    18.  
    19.     glViewport(0,0,width,height);                       // Reset The Current Viewport
    20.  
    21.     glMatrixMode(GL_PROJECTION);                        // Select The Projection Matrix
    22.     glLoadIdentity();                                   // Reset The Projection Matrix
    23.  
    24.     // Calculate The Aspect Ratio Of The Window
    25.     gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
    26.  
    27.     glMatrixMode(GL_MODELVIEW);                         // Select The Modelview Matrix
    28.     glLoadIdentity();                                   // Reset The Modelview Matrix
    29. }
    30.  
    31. int InitGL(GLvoid)                                      // All Setup For OpenGL Goes Here
    32. {
    33.     glShadeModel(GL_SMOOTH);                            // Enable Smooth Shading
    34.     glClearColor(0.0f, 0.0f, 0.0f, 0.5f);               // Black Background
    35.     glClearDepth(1.0f);                                 // Depth Buffer Setup
    36.     glEnable(GL_DEPTH_TEST);                            // Enables Depth Testing
    37.     glDepthFunc(GL_LEQUAL);                             // The Type Of Depth Testing To Do
    38.     glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);  // Really Nice Perspective Calculations
    39.     return TRUE;                                        // Initialization Went OK
    40. }
    41.  
    42. int DrawGLScene(float d)                                    // Here's Where We Do All The Drawing
    43. {
    44.     int i,j,a;
    45.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
    46.     glLoadIdentity();                                   // Reset The Current Modelview Matrix
    47.     glTranslatef(-1.5,-1.0,-6.0f);                     
    48.     float x,y,z,PI,y0,k,Height1,Height2,Width,Limit,Temp;
    49.     int index1,index2,Length;
    50.    
    51.        
    52.  
    53.     Height1=0.06;
    54.     Height2=0.15;
    55.     Length=50;
    56.     Width=2.5;
    57.     Limit=Length/20;    
    58.        
    59.     float Point1x[Length], Point2x[Length];
    60.     float Point1y[Length],Point2y[Length];
    61.     float Point1z[Length],Point2z[Length];
    62.    
    63.  
    64.     for(j=0;j<2;j++)
    65.     {
    66.         y0=Width*j;
    67.                                         // Drawing Using Triangles
    68.        
    69.    
    70.        
    71.         x=-1;
    72.         PI=3.1415;
    73.         for(i=0;i<Length;i++)
    74.         {
    75. //            glColor3f(255,0,0);
    76.             if(i<Limit)
    77.             {
    78.                     k=0;
    79.             }
    80.             else
    81.             {
    82.                     k=d;
    83.             }
    84.             y=Height1*sin(i*2*PI/Length -k);
    85.  
    86.             x=(float)4*i/Length;
    87.             z=Height2*cos(i*2*PI/Length - k);
    88.            
    89.            
    90.             y=y0+y;
    91.             if(j==0)
    92.             {
    93.                 Point1x[i]=x;
    94.                 Point1y[i]=y;
    95.                 Point1z[i]=z;
    96.             }
    97.             else
    98.             {
    99.                 Point2x[i]=x;
    100.                 Point2y[i]=y;
    101.                 Point2z[i]=z;
    102.             }            
    103. //          glVertex3f( x, y0+y, z);                    // Top
    104.         }
    105.        
    106.        
    107.      }
    108.  
    109.      index1=0;
    110.         index2=0;
    111.  //       glBegin(GL_POINTS);
    112.  //       glBegin(GL_QUAD_STRIP);
    113.  
    114.    GLfloat mat_specular[] = { 1, 1, 1, 1 };
    115.    GLfloat mat_shininess[] = { 5 };
    116.  
    117.    GLfloat mat_ambient[]={1,1,1,1};
    118.    GLfloat mat_diffuse[] = {1, 1, 1, 1};
    119.    
    120.    GLfloat light_position[] = { 0, 0.3, 0.2, 1 };
    121. //   GLfloat direction[] = {-1, 1, 1, 1.0f };
    122.    
    123.    glClearColor (0, 0.0, 0.0, 0.0);
    124.    glShadeModel (GL_SMOOTH);
    125.    
    126.    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient);
    127.    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse);
    128.  
    129.    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
    130.    glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
    131. //glMatrixMode(GL_PROJECTION);
    132.   // glLoadIdentity();
    133.    glLightfv(GL_LIGHT0, GL_POSITION, light_position);
    134. //   glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, direction);
    135.  //  glLightf (GL_LIGHT1, GL_SPOT_CUTOFF, 15.f);
    136.    
    137.  
    138.  
    139.    glEnable(GL_LIGHTING);
    140. //   glEnable(GL_LIGHT1);
    141.    glEnable(GL_LIGHT0);
    142.    /*
    143.     glEnable(GL_BLEND);
    144.     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    145.    glDepthFunc(GL_LEQUAL);
    146.    */
    147.    
    148.    glEnable(GL_DEPTH_TEST);
    149.  
    150.  
    151.  
    152.    glEnable(GL_COLOR_MATERIAL);
    153.     glColorMaterial(GL_FRONT, GL_DIFFUSE);
    154.     glColorMaterial(GL_FRONT, GL_AMBIENT);
    155.     glColorMaterial(GL_FRONT, GL_SPECULAR);
    156.         glColorMaterial(GL_FRONT, GL_SHININESS);
    157.    
    158.  
    159.           glBegin(GL_TRIANGLE_STRIP);
    160. //          glBegin(GL_LINE_STRIP);
    161.          glColor3f(1,0,0);
    162.         for(i=0;i<Length*2;i++)
    163.         {
    164.                 if(i==0 || i%2==0)
    165.                 {
    166.                     glVertex3f(Point1x[index1],Point1y[index1],Point1z[index1]);
    167.                     index1=index1+1;
    168.                 }
    169.                 else
    170.                 {
    171.                     glVertex3f(Point2x[index2],Point2y[index2],Point2z[index2]);
    172.                     index2=index2+1;
    173.                 }
    174.         }
    175.        
    176.         glEnd();                                            // Finished Drawing The Triangle
    177.  
    178.  
    179. //=====================================
    180.  
    181.                        
    182.  
    183.  
    184.    
    185. }
    186.  
    187. GLvoid KillGLWindow(GLvoid)                             // Properly Kill The Window
    188. {
    189.     if (fullscreen)                                     // Are We In Fullscreen Mode?
    190.     {
    191.         ChangeDisplaySettings(NULL,0);                  // If So Switch Back To The Desktop
    192.         ShowCursor(TRUE);                               // Show Mouse Pointer
    193.     }
    194.  
    195.     if (hRC)                                            // Do We Have A Rendering Context?
    196.     {
    197.         if (!wglMakeCurrent(NULL,NULL))                 // Are We Able To Release The DC And RC Contexts?
    198.         {
    199.             MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
    200.         }
    201.  
    202.         if (!wglDeleteContext(hRC))                     // Are We Able To Delete The RC?
    203.         {
    204.             MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
    205.         }
    206.         hRC=NULL;                                       // Set RC To NULL
    207.     }
    208.  
    209.     if (hDC && !ReleaseDC(hWnd,hDC))                    // Are We Able To Release The DC
    210.     {
    211.         MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
    212.         hDC=NULL;                                       // Set DC To NULL
    213.     }
    214.  
    215.     if (hWnd && !DestroyWindow(hWnd))                   // Are We Able To Destroy The Window?
    216.     {
    217.         MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
    218.         hWnd=NULL;                                      // Set hWnd To NULL
    219.     }
    220.  
    221.     if (!UnregisterClass("OpenGL",hInstance))           // Are We Able To Unregister Class
    222.     {
    223.         MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
    224.         hInstance=NULL;                                 // Set hInstance To NULL
    225.     }
    226. }
    227.  
    228. /*  This Code Creates Our OpenGL Window.  Parameters Are:                   *
    229.  *  title           - Title To Appear At The Top Of The Window              *
    230.  *  width           - Width Of The GL Window Or Fullscreen Mode             *
    231.  *  height          - Height Of The GL Window Or Fullscreen Mode            *
    232.  *  bits            - Number Of Bits To Use For Color (8/16/24/32)          *
    233.  *  fullscreenflag  - Use Fullscreen Mode (TRUE) Or Windowed Mode (FALSE)   */
    234.  
    235. BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
    236. {
    237.     GLuint      PixelFormat;            // Holds The Results After Searching For A Match
    238.     WNDCLASS    wc;                     // Windows Class Structure
    239.     DWORD       dwExStyle;              // Window Extended Style
    240.     DWORD       dwStyle;                // Window Style
    241.     RECT        WindowRect;             // Grabs Rectangle Upper Left / Lower Right Values
    242.     WindowRect.left=(long)0;            // Set Left Value To 0
    243.     WindowRect.right=(long)width;       // Set Right Value To Requested Width
    244.     WindowRect.top=(long)0;             // Set Top Value To 0
    245.     WindowRect.bottom=(long)height;     // Set Bottom Value To Requested Height
    246.  
    247.     fullscreen=fullscreenflag;          // Set The Global Fullscreen Flag
    248.  
    249.     hInstance           = GetModuleHandle(NULL);                // Grab An Instance For Our Window
    250.     wc.style            = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;   // Redraw On Size, And Own DC For Window.
    251.     wc.lpfnWndProc      = (WNDPROC) WndProc;                    // WndProc Handles Messages
    252.     wc.cbClsExtra       = 0;                                    // No Extra Window Data
    253.     wc.cbWndExtra       = 0;                                    // No Extra Window Data
    254.     wc.hInstance        = hInstance;                            // Set The Instance
    255.     wc.hIcon            = LoadIcon(NULL, IDI_WINLOGO);          // Load The Default Icon
    256.     wc.hCursor          = LoadCursor(NULL, IDC_ARROW);          // Load The Arrow Pointer
    257.     wc.hbrBackground    = NULL;                                 // No Background Required For GL
    258.     wc.lpszMenuName     = NULL;                                 // We Don't Want A Menu
    259.     wc.lpszClassName    = "OpenGL";                             // Set The Class Name
    260.  
    261.     if (!RegisterClass(&wc))                                    // Attempt To Register The Window Class
    262.     {
    263.         MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    264.         return FALSE;                                           // Return FALSE
    265.     }
    266.    
    267.     if (fullscreen)                                             // Attempt Fullscreen Mode?
    268.     {
    269.         DEVMODE dmScreenSettings;                               // Device Mode
    270.         memset(&dmScreenSettings,0,sizeof(dmScreenSettings));   // Makes Sure Memory's Cleared
    271.         dmScreenSettings.dmSize=sizeof(dmScreenSettings);       // Size Of The Devmode Structure
    272.         dmScreenSettings.dmPelsWidth    = width;                // Selected Screen Width
    273.         dmScreenSettings.dmPelsHeight   = height;               // Selected Screen Height
    274.         dmScreenSettings.dmBitsPerPel   = bits;                 // Selected Bits Per Pixel
    275.         dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
    276.  
    277.         // Try To Set Selected Mode And Get Results.  NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar.
    278.         if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
    279.         {
    280.             // If The Mode Fails, Offer Two Options.  Quit Or Use Windowed Mode.
    281.             if (MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?","NeHe GL",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
    282.             {
    283.                 fullscreen=FALSE;       // Windowed Mode Selected.  Fullscreen = FALSE
    284.             }
    285.             else
    286.             {
    287.                 // Pop Up A Message Box Letting User Know The Program Is Closing.
    288.                 MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP);
    289.                 return FALSE;                                   // Return FALSE
    290.             }
    291.         }
    292.     }
    293.  
    294.     if (fullscreen)                                             // Are We Still In Fullscreen Mode?
    295.     {
    296.         dwExStyle=WS_EX_APPWINDOW;                              // Window Extended Style
    297.         dwStyle=WS_POPUP;                                       // Windows Style
    298.         ShowCursor(FALSE);                                      // Hide Mouse Pointer
    299.     }
    300.     else
    301.     {
    302.         dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;           // Window Extended Style
    303.         dwStyle=WS_OVERLAPPEDWINDOW;                            // Windows Style
    304.     }
    305.  
    306.     AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);     // Adjust Window To True Requested Size
    307.  
    308.     // Create The Window
    309.     if (!(hWnd=CreateWindowEx(  dwExStyle,                          // Extended Style For The Window
    310.                                 "OpenGL",                           // Class Name
    311.                                 title,                              // Window Title
    312.                                 dwStyle |                           // Defined Window Style
    313.                                 WS_CLIPSIBLINGS |                   // Required Window Style
    314.                                 WS_CLIPCHILDREN,                    // Required Window Style
    315.                                 0, 0,                               // Window Position
    316.                                 WindowRect.right-WindowRect.left,   // Calculate Window Width
    317.                                 WindowRect.bottom-WindowRect.top,   // Calculate Window Height
    318.                                 NULL,                               // No Parent Window
    319.                                 NULL,                               // No Menu
    320.                                 hInstance,                          // Instance
    321.                                 NULL)))                             // Dont Pass Anything To WM_CREATE
    322.     {
    323.         KillGLWindow();                             // Reset The Display
    324.         MessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    325.         return FALSE;                               // Return FALSE
    326.     }
    327.  
    328.     static  PIXELFORMATDESCRIPTOR pfd=              // pfd Tells Windows How We Want Things To Be
    329.     {
    330.         sizeof(PIXELFORMATDESCRIPTOR),              // Size Of This Pixel Format Descriptor
    331.         1,                                          // Version Number
    332.         PFD_DRAW_TO_WINDOW |                        // Format Must Support Window
    333.         PFD_SUPPORT_OPENGL |                        // Format Must Support OpenGL
    334.         PFD_DOUBLEBUFFER,                           // Must Support Double Buffering
    335.         PFD_TYPE_RGBA,                              // Request An RGBA Format
    336.         bits,                                       // Select Our Color Depth
    337.         0, 0, 0, 0, 0, 0,                           // Color Bits Ignored
    338.         0,                                          // No Alpha Buffer
    339.         0,                                          // Shift Bit Ignored
    340.         0,                                          // No Accumulation Buffer
    341.         0, 0, 0, 0,                                 // Accumulation Bits Ignored
    342.         16,                                         // 16Bit Z-Buffer (Depth Buffer)  
    343.         0,                                          // No Stencil Buffer
    344.         0,                                          // No Auxiliary Buffer
    345.         PFD_MAIN_PLANE,                             // Main Drawing Layer
    346.         0,                                          // Reserved
    347.         0, 0, 0                                     // Layer Masks Ignored
    348.     };
    349.    
    350.     if (!(hDC=GetDC(hWnd)))                         // Did We Get A Device Context?
    351.     {
    352.         KillGLWindow();                             // Reset The Display
    353.         MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    354.         return FALSE;                               // Return FALSE
    355.     }
    356.  
    357.     if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd))) // Did Windows Find A Matching Pixel Format?
    358.     {
    359.         KillGLWindow();                             // Reset The Display
    360.         MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    361.         return FALSE;                               // Return FALSE
    362.     }
    363.  
    364.     if(!SetPixelFormat(hDC,PixelFormat,&pfd))       // Are We Able To Set The Pixel Format?
    365.     {
    366.         KillGLWindow();                             // Reset The Display
    367.         MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    368.         return FALSE;                               // Return FALSE
    369.     }
    370.  
    371.     if (!(hRC=wglCreateContext(hDC)))               // Are We Able To Get A Rendering Context?
    372.     {
    373.         KillGLWindow();                             // Reset The Display
    374.         MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    375.         return FALSE;                               // Return FALSE
    376.     }
    377.  
    378.     if(!wglMakeCurrent(hDC,hRC))                    // Try To Activate The Rendering Context
    379.     {
    380.         KillGLWindow();                             // Reset The Display
    381.         MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    382.         return FALSE;                               // Return FALSE
    383.     }
    384.  
    385.     ShowWindow(hWnd,SW_SHOW);                       // Show The Window
    386.     SetForegroundWindow(hWnd);                      // Slightly Higher Priority
    387.     SetFocus(hWnd);                                 // Sets Keyboard Focus To The Window
    388.     ReSizeGLScene(width, height);                   // Set Up Our Perspective GL Screen
    389.  
    390.     if (!InitGL())                                  // Initialize Our Newly Created GL Window
    391.     {
    392.         KillGLWindow();                             // Reset The Display
    393.         MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    394.         return FALSE;                               // Return FALSE
    395.     }
    396.  
    397.     return TRUE;                                    // Success
    398. }
    399.  
    400. LRESULT CALLBACK WndProc(   HWND    hWnd,           // Handle For This Window
    401.                             UINT    uMsg,           // Message For This Window
    402.                             WPARAM  wParam,         // Additional Message Information
    403.                             LPARAM  lParam)         // Additional Message Information
    404. {
    405.     switch (uMsg)                                   // Check For Windows Messages
    406.     {
    407.         case WM_ACTIVATE:                           // Watch For Window Activate Message
    408.         {
    409.             if (!HIWORD(wParam))                    // Check Minimization State
    410.             {
    411.                 active=TRUE;                        // Program Is Active
    412.             }
    413.             else
    414.             {
    415.                 active=FALSE;                       // Program Is No Longer Active
    416.             }
    417.  
    418.             return 0;                               // Return To The Message Loop
    419.         }
    420.  
    421.         case WM_SYSCOMMAND:
    422.         {
    423.             switch (wParam)
    424.             {
    425.                 case SC_SCREENSAVE:
    426.                 case SC_MONITORPOWER:
    427.                     return 0;
    428.             }
    429.             break;
    430.         }
    431.  
    432.         case WM_CLOSE:                              // Did We Receive A Close Message?
    433.         {
    434.             PostQuitMessage(0);                     // Send A Quit Message
    435.             return 0;                               // Jump Back
    436.         }
    437.  
    438.         case WM_KEYDOWN:                            // Is A Key Being Held Down?
    439.         {
    440.             keys[wParam] = TRUE;                    // If So, Mark It As TRUE
    441.             return 0;                               // Jump Back
    442.         }
    443.  
    444.         case WM_KEYUP:                              // Has A Key Been Released?
    445.         {
    446.             keys[wParam] = FALSE;                   // If So, Mark It As FALSE
    447.             return 0;                               // Jump Back
    448.         }
    449.  
    450.         case WM_SIZE:                               // Resize The OpenGL Window
    451.         {
    452.             ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));  // LoWord=Width, HiWord=Height
    453.             return 0;                               // Jump Back
    454.         }
    455.     }
    456.  
    457.     // Pass All Unhandled Messages To DefWindowProc
    458.     return DefWindowProc(hWnd,uMsg,wParam,lParam);
    459. }
    460.  
    461. int WINAPI WinMain( HINSTANCE   hInstance,          // Instance
    462.                     HINSTANCE   hPrevInstance,      // Previous Instance
    463.                     LPSTR       lpCmdLine,          // Command Line Parameters
    464.                     int         nCmdShow)           // Window Show State
    465. {
    466.     MSG     msg;                                    // Windows Message Structure
    467.     BOOL    done=FALSE;                             // Bool Variable To Exit Loop
    468.  
    469.     // Ask The User Which Screen Mode They Prefer
    470.     if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)
    471.     {
    472.         fullscreen=FALSE;                           // Windowed Mode
    473.     }
    474.  
    475.    float d,a;
    476.  
    477.    d=0;
    478.    a=1;
    479.     // Create Our OpenGL Window
    480.     if (!CreateGLWindow("Flag 3D",640,480,16,fullscreen))
    481.     {
    482.         return 0;                                   // Quit If Window Was Not Created
    483.     }
    484.  
    485.     while(!done)                                    // Loop That Runs While done=FALSE
    486.     {
    487.         if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))   // Is There A Message Waiting?
    488.         {
    489.             if (msg.message==WM_QUIT)               // Have We Received A Quit Message?
    490.             {
    491.                 done=TRUE;                          // If So done=TRUE
    492.             }
    493.             else                                    // If Not, Deal With Window Messages
    494.             {
    495.                 TranslateMessage(&msg);             // Translate The Message
    496.                 DispatchMessage(&msg);              // Dispatch The Message
    497.             }
    498.         }
    499.         else                                        // If There Are No Messages
    500.         {
    501.  
    502.             Sleep(100);
    503.             d=d+1;
    504.             //a=a+1;
    505.            
    506.             if(d>100)
    507.             {
    508.               //a=-a;
    509.               d=0;
    510.             }
    511.                    
    512.                      
    513.                      
    514.             // Draw The Scene.  Watch For ESC Key And Quit Messages From DrawGLScene()
    515.             if ((active && !DrawGLScene(d)) || keys[VK_ESCAPE]) // Active?  Was There A Quit Received?
    516.             {
    517.                 done=TRUE;                          // ESC or DrawGLScene Signalled A Quit
    518.             }
    519.             else                                    // Not Time To Quit, Update Screen
    520.             {
    521.                 SwapBuffers(hDC);                   // Swap Buffers (Double Buffering)
    522.             }
    523.  
    524.             if (keys[VK_F1])                        // Is F1 Being Pressed?
    525.             {
    526.                 keys[VK_F1]=FALSE;                  // If So Make Key FALSE
    527.                 KillGLWindow();                     // Kill Our Current Window
    528.                 fullscreen=!fullscreen;             // Toggle Fullscreen / Windowed Mode
    529.                 // Recreate Our OpenGL Window
    530.                 if (!CreateGLWindow("Flag 3D",640,480,16,fullscreen))
    531.                 {
    532.                     return 0;                       // Quit If Window Was Not Created
    533.                 }
    534.             }
    535.         }
    536.     }
    537.  
    538.     // Shutdown
    539.     KillGLWindow();                                 // Kill The Window
    540.     return (msg.wParam);                            // Exit The Program
    541. }

    Nhớ để code vào trong thẻ để dễ đọc hơn + đặt tiêu đề có dấu
    Đã được chỉnh sửa lần cuối bởi meoconlongvang : 13-05-2009 lúc 06:03 PM.

  6. #6
    Ngày gia nhập
    12 2008
    Bài viết
    198

    Mặc định Lập trình chuyển động trên VC++ | Tạo một lá cờ bay trên VC++?

    của nguyenbinh không chạy được,của bạn kia thì mình không rõ các thư viện bạn lấy ở đâu


    Code:
    #include<windows.h>
    #include "math.h"
    
    void VeCo(HWND hWnd)
    {
    	double PI =3.14;
        HDC hdc, hMemDC;
        HBITMAP hBitmap, oBitmap;
        RECT rc;
        int y;
        static unsigned char t = 0;
    	
        hdc = GetDC(hWnd);
        hMemDC = CreateCompatibleDC(hdc);
        GetClientRect(hWnd, &rc);
    	
        hBitmap = CreateCompatibleBitmap(hdc, rc.right - rc.left, rc.bottom - rc.top);
        oBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
    	
        FillRect(hMemDC, &rc, (HBRUSH)GetBkColor(hMemDC));
        for (int x = 10; x <= 200; ++x)
        {
            y = (int)(float)(20.0*cos(2.0*PI*(t/100.0 - x/200.0)) + 50);
            SetPixel(hMemDC, x, y, RGB(0, 0, 0));
            if ((x == 10)||(x == 200))
            {
                MoveToEx(hMemDC, x, y, NULL);
                LineTo(hMemDC, x, y + 150);
            }
            SetPixel(hMemDC, x, y + 150, RGB(0, 0, 0));
        }
        BitBlt(hdc, 0, 0, rc.right - rc.left, rc.bottom - rc.top, hMemDC, 0, 0, SRCCOPY);
        Sleep(10);
        SelectObject(hMemDC, oBitmap);
        DeleteDC(hMemDC);
        DeleteObject(hBitmap);
        ReleaseDC(hWnd, hdc);
        t = (t > 100)? (0) : (t + 1);
    }
    int WINAPI WinMain( HINSTANCE   hInstance,          // Instance
    				   HINSTANCE   hPrevInstance,      // Previous Instance
    				   LPSTR       lpCmdLine,          // Command Line Parameters
    				   int         nCmdShow)           // Window Show State
    {
    {
        VeCo(0);
    	return 0;
    }
    thử chạy trên VC++6.0

Các đề tài tương tự

  1. Tính ma trận chuyển vị trên C++ sai ở đâu?
    Gửi bởi manutd1988 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 10
    Bài viết cuối: 20-08-2012, 02:07 PM
  2. Chuyển dữ liệu từ SQL sang XML trên C#
    Gửi bởi hungnghia trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 10
    Bài viết cuối: 07-12-2010, 08:15 PM
  3. Cách nào làm tối ưu chương trình ảnh chuyển động trên C#?
    Gửi bởi son0nline trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 20-07-2010, 10:32 PM
  4. Chuyển chữ thuờng thành chữ hoa trên C++
    Gửi bởi haibanh_95 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 20-05-2009, 12:45 AM
  5. Cách tạo Chuyển động của đối tượng trên C#?
    Gửi bởi honest trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 11-05-2009, 02:25 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn