Make your own free website on Tripod.com

. . . . . .สำหรับ Project แรกของเราวันนี้จะเป็นโปรแกรมแสดงภาพ Bitmap อย่างนุ่มนวล สามารถ download โปรแกรมตัวอย่างได้ ที่นี่่ หลังจากที่ได้ไปแล้วอย่าลืมกำหนด include และ lib directory ให้ถูกต้องนะครับ อ้อ มี sub directory picture ด้วยนะครับ พร้อมโปรแกรมตัวอย่าง จะเขียนโปรแกรมต้องติดตั้ง DirectX SDK, Active movie SDK และ Swasdee 7.0 SDK ก่อนนะครับ เปิดแฟ้ม project1.dsp เสร็จแล้วมาลุยกันได้เลยครับ
// CMYAPP.H
#ifndef _CMYAPP_H_
#define _CMYAPP_H_

class CMyApp : public CWinApp
{
. . . . . .
public:
. . . . . . . . .CMyApp( );
. . . . . . . . .
virtual void OnKeyDown( WPARAM wParam, LPARAM lParam );
. . . . . . . . .
virtual void OnPaint( HWND hWnd );
. . . . . . . . .
void TestBitmap( );
};

#endif

. . . . . .จากตัวอย่างข้างบนเป็นวิธีเริ่มการเขียนโปรแกรมใช้งาน Swasdee SDK จะดูคล้ายๆการเขียนโปรแกรมแบบ MFC จะมี OnKeyDown, OnPaint เป็นส่วนการทำงานย่อย ก็.........มีบางอย่างที่ผมอยากรู้ อยากศึกษาว่า MFC มันทำงานอย่างไร ก็ลองออกแบบดู ไม่ยากเย็นอะไรนัก ฮ่า ฮ่า ฮ่า มาดูต่อ เราจะประกาศ Class CMyApp สืบสกุลมาจาก CWinApp บอกก่อนนะครับว่าผมไม่ได้ใช้ MFC แต่เขียนเหมือน MFC อย่างงงๆ จากนั้นเราก็ประกาศฟังค์ชั่นที่จะทำงาน เมื่อกดคีย์คือ OnKeyDown, เมื่อมีการวาด OnPaint และส่วนทดสอบภาพ คือ TestBitmap จะอยู่ในแฟ้ม CMYAPP.H ครับ เรามาดูการทำงานของ CMyapp กัน แบบละเอียด..............วิ้ว.....!!
// CMYAPP.CPP
#include "common.h"

CMyApp::CMyApp( ): //<----- Contructor
. . .CWinApp( )
{
. . .SetVideoMode( 640, 480, 16, TRUE );
//<------- ปรับการแสดงผล ถ้า FALSE จะแสดงแบบ Window
. . .SetGamePath( "" );
//<------ กำหนด Path ที่เก็บข้อมูบ Picture, Map, Movie, Mesh
}

void CMyApp::OnKeyDown( WPARAM wParam, LPARAM lParam )
{
. . .
switch( wParam )
. . .{
. . . . . .
case VK_F1 : TestBitmap( ); break;
. . . . . .
case VK_ESCAPE :
. . . . . .
case VK_F12 : PostQuitMessage( 0 ); break;
. . .}
}

void CMyApp::OnPaint( HWND hWnd )
{
. . .
if( !pSysVPage ) return;

. . .CBitmap pic1;
//<-------- Class CBitmap
. . .pic1.Load(
"SWASDEE1.BMP" ); //<------ เปิดแฟ้มข้อมูลภาพ SWASDEE1.BMP ใน Directory Picture

. . .
int x = 100;
. . .
int y = 100;
. . .
DWORD dwColor = pSysVPage -> XRGB( 0, 200, 0 ); //<------- เลือกสีแบบ RGB

. . .pSysVPage -> Clear( );
//<------ ลบหน้าจอเสมือน

. . .pic1.Draw( pSysVPage, 0, 0 );
//<------ วาดภาพลงหน้าจอเสมือน

. . .pSysVPage -> TextOut( x, y,
"F1. การนำเสนอภาพ Bitmap", dwColor ); //<----- แสดงข้อความ
. . .pSysVPage -> TextOut( x, y += 20,
"F12. จบการทำงาน", dwColor );

. . .FlipScreen( ); //<------ แสดงภาพจากหน้าจอเสมือนสู่หน้าจอจริง
}

void CMyApp::TestBitmap( )
{
. . .CBitmap pic1;
. . .pic1.Load(
"SWASDEE1.BMP" );

. . .
BOOL bFinish = FALSE;
. . .
BOOL bInvert = FALSE;

. . .
int y = 0;
. . .
int inc_y = 15;
. . .
int top = 100;
. . .
. . .
while( !bFinish )
. . .{
. . . . . .pSysVPage -> Clear( );

. . . . . .pic1.Draw( pSysVPage, 0, y, -1, -1, DRAW_COLORKEY );

. . . . . .FlipScreen( );

. . . . . .y += inc_y;

. . . . . .
if( !bInvert )
. . . . . .{
. . . . . . . . .
if( y >= 300 )
. . . . . . . . .{
. . . . . . . . . . . .bInvert = TRUE;
. . . . . . . . . . . .inc_y = -10;

. . . . . . . . . . . .top += 30;
. . . . . . . . . . . .if( top >= 300 ) bFinish = TRUE;
. . . . . . . . .}
. . . . . .}
else
. . . . . .{
. . . . . . . . .
if( y <= top )
. . . . . . . . .{
. . . . . . . . . . . .bInvert = FALSE;
. . . . . . . . . . . .inc_y = 15;
. . . . . . . . .}
. . . . . .}
. . .}

. . .OnPaint( m_hWnd );
//<-------- หลังจากทำงานเสร็จแล้ววาดภาพอีกครั้ง
}