2 swiftmgw swiftmgw 于 2015.05.28 09:42 提问

我是菜鸟,在window编程出现错误,求大神指导!!

//头文件
#include

#include
#pragma comment(lib,"Winmm.lib")

//宏定义
#define WINDOW_WIDTH 800//窗口宽度定义的宏,方便修改
#define WINDOW_HEIGHT 600//高度
#define WINDOW_TITLE L"[致我们永不熄灭的游戏开发梦想]GDI程序核心框架"//标题
//全局函数声明
HDC g_hdc=NULL;//全局设备环境句柄
HPEN g_hPen[7]={0};
HBRUSH g_hBrush[7]={0};
int g_iPenStyle[7]={PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_DASHDOTDOT,PS_NULL,PS_INSIDEFRAME};
int g_iBrushStyle[6]={HS_VERTICAL,HS_HORIZONTAL,HS_CROSS,HS_DIAGCROSS,HS_FDIAGONAL,HS_BDIAGONAL};

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
BOOL Game_Init(HWND hwnd);//资源的初始化函数
VOID Game_Paint(HWND hwnd);//绘图代码书写函数
BOOL Game_CleanUp(HWND hwnd);//资源清理函数
// [WinMain()函数]
//程序入口
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
//1、设计完整的窗口类
{
WNDCLASSEX wndClass={0};//定义窗口类
wndClass.cbSize=sizeof(WNDCLASSEX);//结构体的字节数大小
wndClass.style=CS_HREDRAW | CS_VREDRAW;//窗口样式
wndClass.lpfnWndProc=WndProc;//指向窗口过程函数的指针
wndClass.cbClsExtra=0;
wndClass.cbWndExtra=0;
wndClass.hInstance=hInstance;//句柄
wndClass.hIcon=(HICON)::LoadImage(NULL,L"icon.ico",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
wndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
wndClass.lpszMenuName=NULL;
wndClass.lpszClassName=L"ForTheDreamOfGameDevelop";
//2、注册窗口类
if(!RegisterClassEx(&wndClass))
return -1;
//3、创建窗口
HWND hwnd=CreateWindow(L"ForTheDreamOfGameDevelop",WINDOW_TITLE,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,WINDOW_WIDTH,WINDOW_HEIGHT,NULL,NULL,hInstance,NULL);
//4、窗口的移动、更新
MoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);
ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd);
//游戏资源的初始化。若失败,返回FALSE
if(!Game_Init(hwnd))
{
MessageBox(hwnd,L"资源初始化失败",L"消息窗口",0);
return FALSE;
}
//5、消息循环
MSG msg={0};
while(msg.message!=WM_QUIT)
{
if(PeekMessage(&msg,0,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
//6、窗口注销
UnregisterClass(L"ForTheDreamOfGameDevelop",wndClass.hInstance);
return 0;
}
//窗口过程函数WndProc,对窗口消息处理
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT paintStruct;//定义该结构体记录绘制信息

switch(message)
{
case WM_PAINT://客户区重绘消息
    g_hdc=BeginPaint(hwnd,&paintStruct);
    Game_Paint(hwnd);
    EndPaint(hwnd,&paintStruct);
    ValidateRect(hwnd,NULL);//更新客户区的显示
    break;

case WM_KEYDOWN://键盘按下消息
    if(wParam==VK_ESCAPE)//如果ESC按下
        DestroyWindow(hwnd);//销毁窗口,并发送一条WM_DESTROY消息
    break;

case WM_DESTROY://若是窗口销毁消息
    Game_CleanUp(hwnd);
    PostQuitMessage(0);//响应WM_DESTROY消息
    break;

default:
    return DefWindowProc(hwnd,message,wParam,lParam);//调用默认的窗口消息
}
return 0;

}
// [Gmane_Init()函数]
BOOL Gmane_Init(HWND hwnd)
{
g_hdc=GetDC(hwnd);
srand(timeGetTime());//初始化时间种子
//随机初始化画笔、画刷颜色值
for(int i=0;i<=6;i++)
{
g_hPen[i]=CreatePen(g_iPenStyle[i],1,RGB(rand()%256,rand()%256,rand()%256));
if(i=6)
g_hBrush[i]=CreateSolidBrush(RGB(rand()%256,rand()%256,rand()%256));
else
g_hBrush[i]=CreateHatchBrush(g_iPenStyle[i],RGB(rand()%256,rand()%256,rand()%256));

}

Game_Paint(hwnd);
ReleaseDC(hwnd,g_hdc);
return TRUE;

}
// [Gmane_Pnit()函数]
VOID Gmane_Pnit(HWND hwnd)
{
int y=0;
for(int i=0;i<=6;i++)
{
y=(i+1)*70;
SelectObject(g_hdc,g_hPen[i]);
MoveToEx(g_hdc,30,y,NULL);
LineTo(g_hdc,100,y);
}
int x1=120;
int x2=190;
for(int i=0;i<=6;i++)
{
SelectObject(g_hdc,g_hBrush[i]);
Rectangle(g_hdc,x1,70,x2,y);
x1+=90;
x2+=90;
}
}
//【Gmane_CleanUp()函数】
BOOL Gmane_CleanUp(HWND hwnd )
{
for(int i=0;i<=6;i++)
{
DeleteObject(g_hPen[i]);
DeleteObject(g_hBrush[i]);

}
return TRUE;

}

main.obj : error LNK2019: 无法解析的外部符号 "int cdecl Game_Init(struct HWND *)" (?Game_Init@@YAHPAUHWND__@@@Z),该符号在函数 WinMain@16 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "int __cdecl Game_CleanUp(struct HWND
_ *)" (?Game_CleanUp@@YAHPAUHWND__@@@Z),该符号在函数 "long stdcall WndProc(struct HWND *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "void cdecl Game_Paint(struct HWND *)" (?Game_Paint@@YAXPAUHWND__@@@Z),该符号在函数 "long stdcall WndProc(struct HWND *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) 中被引用

3个回答

oyljerry
oyljerry   Ds   Rxr 2015.05.28 10:14

Game_Init 这些函数实现的cpp有没有一起编译

a1193561652
a1193561652   Rxr 2015.05.28 11:19

大致就是没有找到那些函数的实现,你找找那些函数在哪。

qq2888804
qq2888804   2015.05.28 20:26

好东西,谢谢分享~~~~~~~~~~~~~~

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
大神指导的简历
写一周内到岗,或者 "目前在职期望新工作" 期望薪资待遇一定要写, 我们公司招人的时候 面议的不约的,面议的意思是不确定自己的需要,对自己定位不明确啥的, 别用163邮箱,用foxmail 或者hotmail之类的英文的
我的第一个项目
我在是个学习java才一个月的菜鸟 请各位大神多多指导。。。
讨论:程序员高手和菜鸟的区别是什么?
原文出处: 道法自然(陈贞宝)    随着做软件的时间越来越长,我发现,做软件越来越难。难在哪?难在怎么做出一个好的软件。好的软件标准是什么?两个词,好用,好看!程序员的最大价值在于做出好用又好看的软件的能力。因此,我觉得程序员的价值绝对不在于技术本身,而在于做出好用且好看软件的能力。这是一个开放性的话题,每一个人都是菜鸟过来的,我希望和祝愿每一个技术人员都能尽快成为高手,也希望更多老鸟
从前端菜鸟到大神,一篇总结得很好的文章
从前端菜鸟到大神                                                                                                                                                         转载自:https://github.com/qiu-deqing/FE
qq游戏找茬破解
有很多冗余代码 不是专业人士 见谅 另外可能会出现无响应bug 求大神指导修改
菜鸟到大神的上位历程,即学即用走向人生巅峰(大神学习经验)
结合个人经历总结的前端入门方法,总结从零基础到具备前端基本技能的道路、学习方法、资料。由于能力有限,不能保证面面俱到,只是作为入门参考,面向初学者,让初学者少走弯路。     互联网的快速发展和激烈竞争,用户体验成为一个重要的关注点,导致专业前端工程师成为热门职业,各大公司对前端工程师的需求量都很大,要求也越来越高,优秀的前端工程师更是稀缺。个人感觉前端入门相对容易,但是也需要系统地认
java从菜鸟到大神的成神之路学习路线_me
JAVA从菜鸟到大神的学习路线
从前端菜鸟到大神
联网的快速发展和激烈竞争,用户体验成为一个重要的关注点,导致专业前端工程师成为热门职业,各大公司对前端工程师的需求量都很大,要求也越来越高,优秀的前端工程师更是稀缺。个人感觉前端入门相对容易,但是也需要系统地认真学习,在打好基础后坚持学习,成为优秀前端工程师也只是时间问题。 学习任何知识最重要的都是兴趣,如果经过一段时间的学习感觉不喜欢,那可能强迫自己学习是很痛苦的,效果也不会好,毕竟这很可
ELM——HOG
代码有问题 出现内存访问错误 求大神帮忙修改
oracle菜鸟到大神之路
从http://www.eygle.com/archives/2008/10/oracle_dba_study_road.html抄过来的,如果作者您老人家不高兴了,跟我说哈,我会删除的 开始学习oracle啦,嘿嘿~ 经常有DBA朋友们向我咨询,如果打算进入DBA这一行,应该怎样入门,或者可以通过怎样一个路线图来进行学习。 关于这个主题,其实网络上已经有了一些内容可