在中国大学慕课上面看到的一道题目,算得上是入门吧。
题目如下:
在“HelloWorldGame”游戏代码的基础上,试着进行如下的上机练习(能实现至少一个即可):
• 将文字修改为其他颜色
• 调整文字的显示位置
• 添加鼠标移动消息
• 将输出文字位置修改为鼠标位置,让字符串跟随鼠标移动
• 其他任何能增加游戏性,或你认为必要的功能
解:
1.先在VS上面创建一个Windows桌面向导项目
2.在全局变量处定义一个颜色变量,横坐标,纵坐标
COLORREF color;
int x = 450, y = 150;
3.找到这个函数,这个就是程序入口
//这里是函数的入口
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: 在此处放置代码。
color = RGB(0,0,255); //定义最初的字符显示的颜色
// 初始化全局字符串
LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadStringW(hInstance, IDC_HELLOWORDGAME, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
4.最后找到处理主窗口消息的函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
break;
case WM_LBUTTONDOWN: //按下左边鼠标
color = RGB(255, 0, 255); //变色
InvalidateRect(hWnd, NULL, true); //立即显示,如果没有此语句,按下鼠标左键,字体颜色不会变化
break;
case WM_RBUTTONDOWN: //按下鼠标右键
color = RGB(255, 255, 0);
InvalidateRect(hWnd, NULL, true);
break;
case WM_MOUSEMOVE: //获取鼠标位置,并且赋给x,y
x = LOWORD(lParam);
y = HIWORD(lParam);
InvalidateRect(hWnd, NULL, true);
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
//HDC是指窗体,控件的句柄;唯一标识了一个对象,是Windows系统API定义的一个数据类型
//系统用句柄来记载数据地址的变更。在程序设计中,句柄是一种特殊的智能指针
//当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: 在此处添加使用 hdc 的任何绘图代码...
SetTextColor(hdc, color);
TextOut(hdc, x, y, L"Hello World!", 12); //字符跟随下x,y的位置显示
EndPaint(hWnd, &ps);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}