求解Windows编程代码问题(未声明 怎么定义)
2012-10-04 21:44
330 查看
#include <Windows.h>
#include <tchar.h>
HWND g_hWnd;
#include <gdiplus.h>
#pragma comment(lib,"gdiplus.lib")
using namespace Gdiplus;
ULONG_PTR g_GdiplusToken; //GDI+使用标志
Graphics * g_pGraphics; //画图对象指针
WCHAR g_text[1024] = L"test"; //文字数组
enum SCRAWLTYPE{LINE,RECTANGLE,ELLIPSE};
enum newColor{red,green,blue,white,purple};
static SCRAWLTYPE type = LINE;
static newColor newcolor;
Point g_startPoint(0,0),g_endPoint(100,100);
POINTS begin,end;
int temp = 0;
HMENU g_hPopMenu;
int Game_Init() //游戏资源的初始化
{
int x = 0;
//初始化GDI+图形库
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&g_GdiplusToken, &gdiplusStartupInput, NULL);
g_pGraphics = new Graphics(GetDC(g_hWnd));
if (g_pGraphics == NULL)
return 0;
return 1;
}
void Game_Main() //游戏画图
{
int x = 0,y = 0,z = 0,s=0,q=0;
Font * m_pTextFont = new Font(&FontFamily(L"宋体"),25,FontStyleRegular,UnitPixel);
SolidBrush * m_pTextBrush;
m_pTextBrush = new SolidBrush(Color(255,255,255,255));
g_pGraphics->DrawString(g_text,wcslen(g_text),m_pTextFont,PointF(35,50),m_pTextBrush);
switch(newcolor){
case green:
y=255;
break;}
switch(newcolor){
case red:
x=255;
break;}
switch(newcolor){
case blue:
z=255;
break;}
Pen pen(Color(255,x,y,z),1);
g_pGraphics->DrawLine(&pen,g_startPoint,g_endPoint);
g_pGraphics->DrawRectangle(&pen,0,0,300,400);
g_pGraphics->DrawEllipse(&pen,100,200,100,200);
}
void Game_Shutdown() //释放游戏资源
{
//释放GDI+图形库
delete g_pGraphics;
GdiplusShutdown(g_GdiplusToken);
}
LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
//wstring str = std::wstring(g_text);
POINTS pt;
int len = wcslen(g_text);
switch (message)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_STYLE_LINE:
type=LINE;
break;
case ID_STYLE_RECTANGLE:
type=RECTANGLE;
break;
case ID_STYLE_ELLIPSE:
type=ELLIPSE;
break;
}
::PostQuitMessage(0);
break;
case WM_CHAR:
switch(wp)
{
case 56:
if (len == 0)
{
return 0;
}
g_text[len-1] = '\0';
break;
default:
if (len == 1024)
{
return 0;
}
g_text[len] = char(wp);
}
break;
case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:
::PostQuitMessage(0);
break;
case '7':
type = RECTANGLE;
::InvalidateRect(hwnd,NULL,true);
break;
case '8':
type = LINE;
::InvalidateRect(hwnd,NULL,true);
break;
case 'A':
newcolor=green;
InvalidateRect(hwnd,NULL,true);
break;
case 'B':
newcolor=blue;
InvalidateRect(hwnd,NULL,true);
break;
case 'W':
newcolor=red;
InvalidateRect(hwnd,NULL,true);
break;
}
break;
case WM_DESTROY:
PosQuitMessage(0);//程序结束
//Game_Main();
break;
case WM_LBUTTONDOWN:
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
ClientToScreen(hWnd,&pt);
TrackPopupMenu(g_hPopMenu,TPM_LEFTBUTTON,pt.x,pt.y,0,hWnd,0);
break;
case WM_LBUTTONUP:
end = MAKEPOINTS(lParam);
if (end.x != begin.x && end.y != begin.y)
{
g_startPoint.X = begin.x;
g_startPoint.Y = begin.y;
g_endPoint.X = end.x;
g_endPoint.Y = end.y;
}
::InvalidateRect(hWnd,NULL,true);
break;
}
return DefWindowProc(hwnd,message, wp, lp);
}
int WINAPI WinMain(HINSTANCE histance,HINSTANCE hprevinst,LPSTR lpcmdine,int ncmdshow)
{
WNDCLASS wc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor = LoadCursorFromFile(L"资源/cursor/attack.cur");
wc.hIcon = NULL;
wc.hInstance = hinstance;
wc.lpfnWndProc = WinProc;
wc.lpszClassName = L"mygame";
wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);//窗口菜单
wc.style = CS_HREDRAW | CS_VREDRAW;
::RegisterClass(&wc);
g_hWnd = CreateWindow(L"mygame",L"游戏窗口",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hi,NULL);
ShowWindow(g_hWnd,SW_SHOW);
if (Game_Init() == 0)
{
MessageBox(NULL,L"游戏初始化失败",L"错误",MB_OK);
return 0;
}
HMENU hMenu=LoadMenu(hinstance,MAKEINTRESOURCE(IDR_MENU2));
g_hPopMenu=GetSubMenu(hWnd,0);
MSG msg;//定义一个消息对象
HACCEL hAcce=LoadAccelerator(hinstance,MAKEINTRESOURCE(IDR_ACCELERATOR1));//进入消息循环
while (true)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))//接收系统消息(&msg为MSG类型的信息结构体,NULL是窗口句柄,0,是表示接收所有信息的窗口
{
if(!TranslateAccelerator(g_hWnd,hAcce,&msg))
{
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);//把键盘等码转换为系统识别的虚拟键码信息
DispatchMessage(&msg);//转到消息的回调函数处理消息
}
}
else
Sleep(100);
Game_Main();
}
Game_Shutdown();
}
求高手把修改好的代码发给我
#include <tchar.h>
HWND g_hWnd;
#include <gdiplus.h>
#pragma comment(lib,"gdiplus.lib")
using namespace Gdiplus;
ULONG_PTR g_GdiplusToken; //GDI+使用标志
Graphics * g_pGraphics; //画图对象指针
WCHAR g_text[1024] = L"test"; //文字数组
enum SCRAWLTYPE{LINE,RECTANGLE,ELLIPSE};
enum newColor{red,green,blue,white,purple};
static SCRAWLTYPE type = LINE;
static newColor newcolor;
Point g_startPoint(0,0),g_endPoint(100,100);
POINTS begin,end;
int temp = 0;
HMENU g_hPopMenu;
int Game_Init() //游戏资源的初始化
{
int x = 0;
//初始化GDI+图形库
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&g_GdiplusToken, &gdiplusStartupInput, NULL);
g_pGraphics = new Graphics(GetDC(g_hWnd));
if (g_pGraphics == NULL)
return 0;
return 1;
}
void Game_Main() //游戏画图
{
int x = 0,y = 0,z = 0,s=0,q=0;
Font * m_pTextFont = new Font(&FontFamily(L"宋体"),25,FontStyleRegular,UnitPixel);
SolidBrush * m_pTextBrush;
m_pTextBrush = new SolidBrush(Color(255,255,255,255));
g_pGraphics->DrawString(g_text,wcslen(g_text),m_pTextFont,PointF(35,50),m_pTextBrush);
switch(newcolor){
case green:
y=255;
break;}
switch(newcolor){
case red:
x=255;
break;}
switch(newcolor){
case blue:
z=255;
break;}
Pen pen(Color(255,x,y,z),1);
g_pGraphics->DrawLine(&pen,g_startPoint,g_endPoint);
g_pGraphics->DrawRectangle(&pen,0,0,300,400);
g_pGraphics->DrawEllipse(&pen,100,200,100,200);
}
void Game_Shutdown() //释放游戏资源
{
//释放GDI+图形库
delete g_pGraphics;
GdiplusShutdown(g_GdiplusToken);
}
LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
//wstring str = std::wstring(g_text);
POINTS pt;
int len = wcslen(g_text);
switch (message)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_STYLE_LINE:
type=LINE;
break;
case ID_STYLE_RECTANGLE:
type=RECTANGLE;
break;
case ID_STYLE_ELLIPSE:
type=ELLIPSE;
break;
}
::PostQuitMessage(0);
break;
case WM_CHAR:
switch(wp)
{
case 56:
if (len == 0)
{
return 0;
}
g_text[len-1] = '\0';
break;
default:
if (len == 1024)
{
return 0;
}
g_text[len] = char(wp);
}
break;
case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:
::PostQuitMessage(0);
break;
case '7':
type = RECTANGLE;
::InvalidateRect(hwnd,NULL,true);
break;
case '8':
type = LINE;
::InvalidateRect(hwnd,NULL,true);
break;
case 'A':
newcolor=green;
InvalidateRect(hwnd,NULL,true);
break;
case 'B':
newcolor=blue;
InvalidateRect(hwnd,NULL,true);
break;
case 'W':
newcolor=red;
InvalidateRect(hwnd,NULL,true);
break;
}
break;
case WM_DESTROY:
PosQuitMessage(0);//程序结束
//Game_Main();
break;
case WM_LBUTTONDOWN:
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
ClientToScreen(hWnd,&pt);
TrackPopupMenu(g_hPopMenu,TPM_LEFTBUTTON,pt.x,pt.y,0,hWnd,0);
break;
case WM_LBUTTONUP:
end = MAKEPOINTS(lParam);
if (end.x != begin.x && end.y != begin.y)
{
g_startPoint.X = begin.x;
g_startPoint.Y = begin.y;
g_endPoint.X = end.x;
g_endPoint.Y = end.y;
}
::InvalidateRect(hWnd,NULL,true);
break;
}
return DefWindowProc(hwnd,message, wp, lp);
}
int WINAPI WinMain(HINSTANCE histance,HINSTANCE hprevinst,LPSTR lpcmdine,int ncmdshow)
{
WNDCLASS wc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor = LoadCursorFromFile(L"资源/cursor/attack.cur");
wc.hIcon = NULL;
wc.hInstance = hinstance;
wc.lpfnWndProc = WinProc;
wc.lpszClassName = L"mygame";
wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);//窗口菜单
wc.style = CS_HREDRAW | CS_VREDRAW;
::RegisterClass(&wc);
g_hWnd = CreateWindow(L"mygame",L"游戏窗口",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hi,NULL);
ShowWindow(g_hWnd,SW_SHOW);
if (Game_Init() == 0)
{
MessageBox(NULL,L"游戏初始化失败",L"错误",MB_OK);
return 0;
}
HMENU hMenu=LoadMenu(hinstance,MAKEINTRESOURCE(IDR_MENU2));
g_hPopMenu=GetSubMenu(hWnd,0);
MSG msg;//定义一个消息对象
HACCEL hAcce=LoadAccelerator(hinstance,MAKEINTRESOURCE(IDR_ACCELERATOR1));//进入消息循环
while (true)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))//接收系统消息(&msg为MSG类型的信息结构体,NULL是窗口句柄,0,是表示接收所有信息的窗口
{
if(!TranslateAccelerator(g_hWnd,hAcce,&msg))
{
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);//把键盘等码转换为系统识别的虚拟键码信息
DispatchMessage(&msg);//转到消息的回调函数处理消息
}
}
else
Sleep(100);
Game_Main();
}
Game_Shutdown();
}
求高手把修改好的代码发给我
相关文章推荐
- VC编程问题:为什么在Windows中这样定义POINT?(转)
- Windows编程中UNICODE和_UNICODE定义问题
- Windows编程中UNICODE和_UNICODE定义问题
- Socket 编程 windows到Linux代码移植遇到的问题
- Windows编程中UNICODE和_UNICODE定义问题
- Windows编程中UNICODE和_UNICODE定义问题
- Windows编程中UNICODE和_UNICODE定义问题
- Socket 编程 windows到Linux代码移植遇到的问题
- 在Linux中#!/usr/bin/python之后把后面的代码当成程序来执行。 但是在windows中用IDLE编程的话#后面的都是注释,之后的代码都被当成文本了。 该怎么样才能解决这个问题呢?
- .net项目配置文件导致runat="server"无效,不能自动生成声明代码的问题
- 每个程序员1小时内必须解决的5个编程问题--解答代码
- 用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C
- C语言:函数声明与定义的参数不一致问题,后果可能很严重哦!!!!!
- Windows编程 - 启动可执行(exe)程序 代码(C++)
- 代码审核工具ReviewBoard在Windows下安装问题
- apicloud git-svn 地址冲突,导致代码管理功能不可用.这个问题是由 windows 系统自身DLL加载机制引起的.一般重启电脑即可解决
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- windows 核心编程第五版 源代码 无法编译的问题
- Trie树的应用,一道算法问题求解 代码实现
- 编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包问题求解)