资源简介

本人的原创Windows入门程序,直接用C语言调用Windows API的方式编写,几乎涉及了Windows入门会碰到的所有基础问题:窗口、消息、菜单、工具栏、资源、对话框、计时器、自绘按钮、GDI位图操作、Windows目录操作、INI文件操作等等。 顺便向一位叫吴志刚的朋友表示感谢,我从你的MFC版本的俄罗斯方块中拿了图标和所有的位图资源,还仿照了你的界面布局,希望你不要责备后生,呵呵。 程序的开发环境是VC6,源代码中有详细的注释,算法也一看就明白,如果你是位初学者,拿来练练手应该会有所收获,希望能对你有所帮助。

资源截图

代码片段和文件信息

//=========================================================
// Project Win32 俄罗斯方块程序
// File Tetris.cpp 主程序
// Update 2009.04
// Author 沉淪 http://www.EasyIDE.cn
// Tools Visual C++ 6.0 & Editplus 3
//=========================================================

#include “Tetris.h“

//Windows 入口函数
int WINAPI WinMain(HINSTANCE hInstanceHINSTANCE hPrevInstanceLPSTR szCmdLineint iCmdShow)
{
static TCHAR szClsName[] = TEXT(“Tetris“);
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;

InitCommonControls(); //初始化通用控件类库

//程序启动时初始化数据
hInst = hInstance;
RandomBlock(&ii&jj&cc);
//x = 4; y = -1;
iLevel = 1; iSorce = 0;
ilayer = 0; iSorceMax = TetrisIni(0);
hDcAlert = CreateCompatibleDC(NULL);

//注册窗口类
wndclass.hInstance = hInstance;
wndclass.lpszClassName = szClsName;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.style = CS_HREDRAW|CS_VREDRAW;
wndclass.hIcon = LoadIcon(hInstanceMAKEINTRESOURCE(IDI_ICON1));
wndclass.hIconSm = NULL;
wndclass.hCursor = LoadCursor(NULLIDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
wndclass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
if ( !RegisterClassEx(&wndclass) )
{
MessageBox(
NULL
TEXT(“This program requires Windows NT!“)
TEXT(“RegisterClass ERROR“)
MB_IConerror);
return 0;

}

//创建主窗口
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE
szClsName
TEXT(“俄罗斯方块Win32版“)
WS_MINIMIZEBOX|WS_SYSMENU
GetSystemMetrics(SM_CXFULLSCREEN)/2-370/2
GetSystemMetrics(SM_CYFULLSCREEN)/2-520/2
370
520
NULL
NULL
hInstance
NULL);

//显示窗口并刷新客户区
ShowWindow(hwndiCmdShow);
UpdateWindow(hwnd);

//构建消息循环
while ( GetMessage(&msgNULL00) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

//主窗口过程
LRESULT CALLBACK WndProc(HWND hwndUINT messageWPARAM wParamLPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;

switch ( message )
{
case WM_CREATE:
GameUI(hwnd); //创建界面控件
GameStart(hwnd); //数据初始化
//背景音乐初始化
bMusicOn = TRUE;
iMusicBG = IDR_WAVE1;
hMenu = GetMenu(hwnd);
MusicItem(IDM_MUSIC1);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd&ps);
DrawMatrix(hdc); //绘制游戏区
DrawTetris(hdc000); //绘制方块
DrawNext(hdc); //绘制预览区
BitBlt(hdc4020016050hDcAlert00SRCCOPY);//绘制提示语
EndPaint(hwnd&ps);
return 0;
case WM_TIMER:
DropTetris(hwnd);
return 0;
case WM_DRAWITEM:
DrawButton(lParam); //绘制方向按钮
return TRUE;
case WM_KEYDOWN:
switch ( (int)wParam )
{
case VK_LEFT:
if ( !bStart ) break;
if ( CheckBlock(x-1y) )
{
x --;
hdc = GetDC(hwnd);
DrawTetris(hdc-100);
ReleaseDC(hwndhdc);
}

break;
case VK_RIGHT:
if ( !bStart ) break;
if ( CheckBlock(x+1y) )
{
x ++;
hdc = GetDC(hwnd);
DrawTetris(hdc100);
ReleaseDC(hwndhdc);

评论

共有 条评论