|
ATOM myRegisterClass(HINSTANCE);//注册窗体类
BOOL InitInstance(HINSTANCE,int);//创建窗口
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//消息处理
void _mypaint(HDC);//绘制窗口
HBITMAP man[7];//定义位图数组
DWORD tNow,tPre,tChk;//定义现在CPU的时间,前一个时间,校验时间
DWORD count,frame,fps;//定义计数,框架1秒内更新的总次数,框架每秒更新的次数
HDC hdc,mdc;
HWND hwd;//操作窗体
int APIENTRY WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd )
{
MSG msg;
myRegisterClass(hInstance);//注册窗口
if (!InitInstance(hInstance,nShowCmd)) return false;//窗口创建失败
GetMessage(&msg,NULL,NULL,NULL);
while (msg.message!= WM_QUIT)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);//翻译消息按键消息
DispatchMessage(&msg);//转换按键消息
}
else
{
tNow = GetTickCount();//获取CPU频率
if (tNow- tPre>=100)//每次贴图的时间间隔为0.1秒
{
_mypaint(hdc);
}
}
}
return msg.wParam;//wParam 通常返回一个常量值
}
ATOM myRegisterClass(HINSTANCE hInstance)//注册窗体
{
WNDCLASSEX wcse;
wcse.cbSize = sizeof(WNDCLASSEX);//计算所需内存的字节大小
wcse.style = CS_HREDRAW | CS_VREDRAW;//窗口风格 | CS_NOCLOSE(调节高度 宽度自动适应,没有关闭按钮)
wcse.lpfnWndProc= WndProc;//指定一个指针指向窗口(处理窗口消息处理函数)
wcse.cbWndExtra = 0;//是否需要额外的字节处理窗口的初始化
wcse.cbClsExtra =0;//指定额外数量的字节来初始化WNDCLASSEX结构体。
wcse.hInstance = hInstance;// 用于操作的当前窗口
wcse.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON2));//加载图标
wcse.hCursor= LoadCursorFromFile("..//Working.ani");//加载了动态光标
wcse.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//背景颜色
wcse.lpszMenuName = NULL;//如果没有菜单则为NULL 如果有菜单 需要使用MAKEINTRESOURCE(标号)
wcse.lpszClassName = "Game";//指向窗口类的名字,在初始化的时候根据这个寻址
wcse.hIconSm = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON2));
return RegisterClassEx(&wcse);
}
BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)//创建窗口
{
hwd = CreateWindow("Game","单点兽",WS_OVERLAPPEDWINDOW &~WS_MAXIMIZEBOX,//&~WS_SIZEBOX
CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
if (!hwd) return false;//假如创建失败 即退出
MoveWindow(hwd,100,100,600,500,true);//移动窗口到指定位置
UpdateWindow(hwd);//更新窗口
ShowWindow(hwd,nCmdShow);//显示窗口
hdc = GetDC(hwd);//获取控制窗口的有效内容区域
mdc =CreateCompatibleDC(hdc);
char filename[20]=" ";//存储
for (int i=0;i<7;i++)
{
sprintf_s(filename,"..//man%d.bmp",i);
man =(HBITMAP)LoadImage(NULL,filename,IMAGE_BITMAP,640,480,LR_LOADFROMFILE);
}
_mypaint(hdc);
return true;
}
void _mypaint(HDC hdc)//绘制窗口
{
char name[40]=" ";//显示文本
if(count == 7) count = 0;//重置计数器
frame++;//刷新次数++
if (tNow -tChk>=1000)//是否经过1秒钟
{
fps = frame;
tChk = tNow;
frame = 0;//将刷新次数置为0;
}
//黏贴男人物图片
SelectObject(mdc,man[count]);
sprintf_s(name,"每秒刷新次数%d fps",fps);
TextOut(mdc,0,0,name,strlen(name));
BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
tPre = GetTickCount();
count++;
ReleaseDC(hwd,hdc);
DeleteDC(mdc);
}
LRESULT CALLBACK WndProc(HWND hwd,UINT msg,WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;//定义绘画函数
HDC hdc1;
switch (msg)
{
case WM_PAINT:
hdc1 = BeginPaint(hwd,&ps);//开始绘制窗口
//TOD 添加代码
EndPaint(hwd,&ps);
break;
case WM_DESTROY:
for (int i=0;i<7;i++)
{
DeleteObject(man);
}
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwd,msg,wParam,lParam);
break;
}
return 0;
}
这是vc++游戏设计基础的代码!结果它的源程序也是如此的占用内存! |
|