您的位置:首页 > 编程语言

求解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();

}

求高手把修改好的代码发给我
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐