|
|
手工只需要写以下代码,就可以创造一个看图软件
(用DDraw进行缩放(自动剪裁)+自动创建ddraw及surf+自动Present(可缩放)+自动调整客户区大小+总在最前)
VB6+vb6runtime根本做不到,VB6+ddraw就更不可能了
(创建ddraw及表面都要写半天,苦..还有剪裁,特别是缩放中的剪裁计算,就算懂"点的映射"思想也要写半天)
好,就算我吃亏,姑且让你用vb6runtime,Form,PictureBox,
那你AdjustWindow把client调整到800*600也需要一定的枯燥代码,AlwaysOnTop也要自己写.
而且你想处理所有WM_xxx消息也是很费事的。
而且,你这还没有使用 dx, 怎么算做游戏?
#include <instGameWnd.h>
#include <inst2D.h>
using namespace inst;
using namespace inst::i2d;
Bool g_bExit = False;
SmartPtr<CGameWnd> g_pMainWnd;
HWND g_hwnd;
const POS g_Width = 800, g_Height = 600;
SmartPtr<CGraphics> g;
SmartPtr<CSurf> pback;
SmartPtr<CSurf> pic_ori;
POS pic_x =0 , pic_y = 0;
Float scale = 1.0f;
void MainWnd_WinProc(UINT msg,WPARAM wparam,LPARAM lparam)
{
Switch (msg)
{
Case WM_KEYDOWN:
Switch (wparam)
{
case 'A': pic_x += 50 ;break;
case 'S': pic_y -= 50 ;break;
case 'D': pic_x -= 50 ;break;
case 'W': pic_y += 50 ;break;
case 'Q': scale*=1.05f ;break;
case 'E': scale/=1.05f ;break;
}
break;
Case WM_DESTROY:
g_bExit=True;
break;
}
}
void Init()
{
g_pMainWnd = new CGameWnd(L"TestWnd");
g_pMainWnd->SetCallback(&MainWnd_WinProc);
g_pMainWnd->Show();
g_hwnd = g_pMainWnd->GetHWnd();
CGraphics::CreateGraphics(g_Width,g_Height,g_hwnd);
g = CGraphics::GetGraphics();
pback = g->GetBackBuffer();
pic_ori = new CSurf( L"C:\\a.bmp" );
}
void Render()
{
if( (g_pMainWnd->GetStyle()&WS_MINIMIZE) != 0 ) return;
pback->FillRect(0,0,pback->GetW(),pback->GetH(),Rgb(0,0,0));
pback->Stretch( pic_x, pic_y, pic_ori->GetW() * scale, pic_ori->GetH() * scale,
pic_ori, 0, 0, pic_ori->GetW(), pic_ori->GetH(), False);
g-> resent();
}
Bool MsgLoop()
{
if(g_bExit)return True;
::MSG msg;
ZeroMemory(&msg,sizeof(msg));
if(: eekMessage(&msg,0,0U,0U,PM_REMOVE))
{
::TranslateMessage(&msg);
: ispatchMessage(&msg);
}
Render();
return False;
}
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR CmdLine,int nShowCmd)
{
Init();
While (1)
if(MsgLoop())break;
return 0;
} |
|