资源简介
本教程试图使用尽可能快和尽可能清晰的方法教你开
始 Win32 API 开发.它是以一个整体来组织的,所以在你
提问之前请从头到尾看一遍...你的大多数问题很可能
在文字中已被回答.每个章节以之前的章节为基础.我也
在附錄 A 中附上了一些常见的错误的解決方法.如果你问
一些在教程中已被回答的问题的话,看起来就有点不聪明
了.

代码片段和文件信息
#include
#include “resource.h“
const char g_szClassName[] = “myWindowClass“;
const int ID_TIMER = 1;
const int BALL_MOVE_DELTA = 2;
typedef struct _BALLINFO
{
int width;
int height;
int x;
int y;
int dx;
int dy;
}BALLINFO;
BALLINFO g_ballInfo;
HBITMAP g_hbmBall = NULL;
HBITMAP g_hbmMask = NULL;
HBITMAP CreateBitmapMask(HBITMAP hbmColour COLORREF crTransparent)
{
HDC hdcMem hdcMem2;
HBITMAP hbmMask;
BITMAP bm;
Getobject(hbmColour sizeof(BITMAP) &bm);
hbmMask = CreateBitmap(bm.bmWidth bm.bmHeight 1 1 NULL);
hdcMem = CreateCompatibleDC(0);
hdcMem2 = CreateCompatibleDC(0);
Selectobject(hdcMem hbmColour);
Selectobject(hdcMem2 hbmMask);
SetBkColor(hdcMem crTransparent);
BitBlt(hdcMem2 0 0 bm.bmWidth bm.bmHeight hdcMem 0 0 SRCCOPY);
BitBlt(hdcMem 0 0 bm.bmWidth bm.bmHeight hdcMem2 0 0 SRCINVERT);
DeleteDC(hdcMem);
DeleteDC(hdcMem2);
return hbmMask;
}
void DrawBall(HDC hdc RECT* prc)
{
HDC hdcBuffer = CreateCompatibleDC(hdc);
HBITMAP hbmBuffer = CreateCompatibleBitmap(hdc prc->right prc->bottom);
HBITMAP hbmOldBuffer = (HBITMAP)Selectobject(hdcBuffer hbmBuffer);
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hbmOld = (HBITMAP)Selectobject(hdcMem g_hbmMask);
FillRect(hdcBuffer prc (HBRUSH)GetStockobject(WHITE_BRUSH));
BitBlt(hdcBuffer g_ballInfo.x g_ballInfo.y g_ballInfo.width g_ballInfo.height hdcMem 0 0 SRCAND);
Selectobject(hdcMem g_hbmBall);
BitBlt(hdcBuffer g_ballInfo.x g_ballInfo.y g_ballInfo.width g_ballInfo.height hdcMem 0 0 SRCPAINT);
BitBlt(hdc 0 0 prc->right prc->bottom hdcBuffer 0 0 SRCCOPY);
Selectobject(hdcMem hbmOld);
DeleteDC(hdcMem);
Selectobject(hdcBuffer hbmOldBuffer);
DeleteDC(hdcBuffer);
Deleteobject(hbmBuffer);
}
void UpdateBall(RECT* prc)
{
g_ballInfo.x += g_ballInfo.dx;
g_ballInfo.y += g_ballInfo.dy;
if(g_ballInfo.x < 0)
{
g_ballInfo.x = 0;
g_ballInfo.dx = BALL_MOVE_DELTA;
}
else if(g_ballInfo.x + g_ballInfo.width > prc->right)
{
g_ballInfo.x = prc->right - g_ballInfo.width;
g_ballInfo.dx = -BALL_MOVE_DELTA;
}
if(g_ballInfo.y < 0)
{
g_ballInfo.y = 0;
g_ballInfo.dy = BALL_MOVE_DELTA;
}
else if(g_ballInfo.y + g_ballInfo.height > prc->bottom)
{
g_ballInfo.y = prc->bottom - g_ballInfo.height;
g_ballInfo.dy = -BALL_MOVE_DELTA;
}
}
LRESULT CALLBACK WndProc(HWND hwnd UINT msg WPARAM wParam LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
UINT ret;
BITMAP bm;
g_hbmBall = LoadBitmap(GetModuleHandle(NULL) MAKEINTRESOURCE(IDB_BALL));
if(g_hbmBall == NULL)
MessageBox(hwnd “Could not load IDB_BALL!“ “Error“ MB_OK | MB_ICONEXCLAMATION);
g_hbmMask = CreateBitmapMask(g_hbmBall RGB(0 0 0));
if(g_hbmMask == NULL)
MessageBox(hwnd “Could not create mask!“ “Error“ MB_OK | MB_ICONEXCLAMATION);
Getobject(g_hbmBall sizeof(b
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2008-07-18 21:24 source\anim_one\
文件 5287 2008-07-18 21:24 source\anim_one\anim_one.c
文件 1748 2008-07-18 21:24 source\anim_one\anim_one.rc
文件 6015 2008-07-18 21:24 source\anim_one\anim_one.vcproj
文件 630 2008-07-18 21:24 source\anim_one\ball.bmp
目录 0 2008-07-18 21:24 source\anim_one\Release\
文件 41472 2008-07-18 21:24 source\anim_one\Release\anim_one.exe
文件 457 2008-07-18 21:24 source\anim_one\resource.h
目录 0 2008-07-18 21:24 source\app_four\
文件 13196 2008-07-18 21:24 source\app_four\app_four.c
文件 2581 2008-07-18 21:24 source\app_four\app_four.rc
文件 6089 2008-07-18 21:24 source\app_four\app_four.vcproj
目录 0 2008-07-18 21:24 source\app_four\Release\
文件 43008 2008-07-18 21:24 source\app_four\Release\app_four.exe
文件 974 2008-07-18 21:24 source\app_four\resource.h
目录 0 2008-07-18 21:24 source\app_one\
文件 2400 2008-07-18 21:24 source\app_one\app_one.c
文件 5469 2008-07-18 21:24 source\app_one\app_one.vcproj
目录 0 2008-07-18 21:24 source\app_one\Release\
文件 38912 2008-07-18 21:24 source\app_one\Release\app_one.exe
目录 0 2008-07-18 21:24 source\app_three\
文件 8344 2008-07-18 21:24 source\app_three\app_three.c
文件 2061 2008-07-18 21:24 source\app_three\app_three.rc
文件 6105 2008-07-18 21:24 source\app_three\app_three.vcproj
目录 0 2008-07-18 21:24 source\app_three\Release\
文件 40960 2008-07-18 21:24 source\app_three\Release\app_three.exe
文件 644 2008-07-18 21:24 source\app_three\resource.h
目录 0 2008-07-18 21:24 source\app_two\
文件 5526 2008-07-18 21:24 source\app_two\app_two.c
文件 2061 2008-07-18 21:24 source\app_two\app_two.rc
文件 5943 2008-07-18 21:24 source\app_two\app_two.vcproj
............此处省略85个文件信息
相关资源
- OSG 72集视频教程和资料140620
- EPSON XP225 xp235 xp245打印机清零软件+教
- 数据库系统基础教程答案第三版机械
- 用友NC开发API字典
- Web Api 通过文件流 文件到本地
- Spire API文档
- Python中Numpy库最新教程
- 郭天祥ARM9视频教程
- IAR-Keygen-2019+附使用教程.zip
- ectouch最新版JSAPI微信支付V3插
- Servlet API中文文档
- SigmaPlot教程之各种柱形图的数据排列
- jstl-api-1.2和jstl-impl-1.2
- UNIX/LINUX编程实践教程的源码
- 介绍几种压缩算法及《笨笨数据压缩
- 组态软件IFIX 学习 教程
- hidusage.h hidpi.h 等USB开发用头文件
- 4 1视图建模教程实例大全
- OpenGL文档,api大全,可直接查询函数
- 80X86汇编语言基础教程(光盘内容)
- [易语言]游戏多开例程
- nVidia 控制面板 API
- IpHlpApi.h&IpHlpApi.lib
- vc编写中国象棋详细源码注释并附有视
- Bochs入门教程[操作系统第一步]
- FPGA开发-ChipScope教程
- 应用接口支持库1.1版eAPI
- 手机短信api接口(源代码)
- U盘量产工具 全世界最简单教程
- 软件项目管理案例教程4
评论
共有 条评论