鱼C论坛

 找回密码
 立即注册
查看: 6051|回复: 2

关于stdafx.h'无法识别问题

[复制链接]
发表于 2014-11-7 11:03:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include "stdafx.h"
#include <stdio.h>   
  
//全局变量声明   
HINSTANCE hInst;  
HBITMAP girl[4],bg;  
HDC     hdc,mdc,bufdc;  
HWND    hWnd;  
DWORD   tPre,tNow;  
int     num,dir,x,y;       //x,y变量为人物贴图坐标,dir为人物移动方向,这里我们中以0,1,2,3代表人物上,下,左,右方向上的移动:num为连续贴图中的小图编号   
  
//全局函数声明   
ATOM                MyRegisterClass(HINSTANCE hInstance);  
BOOL                InitInstance(HINSTANCE, int);  
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);  
void                MyPaint(HDC hdc);  
  
//****WinMain函数,程序入口点函数***********************   
int APIENTRY WinMain(HINSTANCE hInstance,  
                     HINSTANCE hPrevInstance,  
                     LPSTR     lpCmdLine,  
                     int       nCmdShow)  
{  
    MSG msg;  
  
  MyRegisterClass(hInstance);  
 
    //初始化   
    if (!InitInstance (hInstance, nCmdShow))   
   {  
        return FALSE;  
   }  
  
     GetMessage(&msg,NULL,NULL,NULL);            //初始化msg     
    //消息循环   
    while( msg.message!=WM_QUIT )  
    {  
        if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE) )  
        {  
40.            TranslateMessage( &msg );  
41.            DispatchMessage( &msg );  
42.        }  
43.        else  
44.        {  
45.            tNow = GetTickCount();  
46.            if(tNow-tPre >= 40)  
47.                MyPaint(hdc);  
        }  
    }  
  
    return msg.wParam;  
}  
  
//****设计一个窗口类,类似填空题,使用窗口结构体*******************   
ATOM MyRegisterClass(HINSTANCE hInstance)  
{  
    WNDCLASSEX wcex;  
 
    wcex.cbSize = sizeof(WNDCLASSEX);   
    wcex.style          = CS_HREDRAW | CS_VREDRAW;  
61.    wcex.lpfnWndProc    = (WNDPROC)WndProc;  
62.    wcex.cbClsExtra     = 0;  
63.    wcex.cbWndExtra     = 0;  
64.    wcex.hInstance      = hInstance;  
    wcex.hIcon          = NULL;  
    wcex.hCursor        = NULL;  
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);  
68.    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);  
69.    wcex.lpszMenuName   = NULL;  
70.    wcex.lpszClassName  = "canvas";  
71.    wcex.hIconSm        = NULL;  
72.  
73.    return RegisterClassEx(&wcex);  
}  
  
//****初始化函数*************************************   
// 加载位图并设定各种初始值   
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)  
{  
    HBITMAP bmp;  
    hInst = hInstance;  
 
    hWnd = CreateWindow("canvas", "绘图窗口" , WS_OVERLAPPEDWINDOW,  
        CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);  
  
86.    if (!hWnd)  
87.    {  
88.        return FALSE;  
89.    }  
90.  
91.    MoveWindow(hWnd,10,10,640,480,true);  
92.    ShowWindow(hWnd, nCmdShow);  
93.    UpdateWindow(hWnd);  
94.  
95.    hdc = GetDC(hWnd);  
96.    mdc = CreateCompatibleDC(hdc);  
97.    bufdc = CreateCompatibleDC(hdc);  
98.  
99.  
100.    //建立空的位图并置入mdc中   
101.    bmp = CreateCompatibleBitmap(hdc,640,480);  
102.    SelectObject(mdc,bmp);  
103.  
104.  
105.    //设定人物贴图初始位置和移动方向   
106.    x = 300;  
107.    y = 250;  
108.    dir = 0;  
109.    num = 0;  
110.  
111.    //载入各连续移动位图及背景图   
112.    girl[0] = (HBITMAP)LoadImage(NULL,"girl0.bmp",IMAGE_BITMAP,440,148,LR_LOADFROMFILE);  
113.    girl[1] = (HBITMAP)LoadImage(NULL,"girl1.bmp",IMAGE_BITMAP,424,154,LR_LOADFROMFILE);  
114.    girl[2] = (HBITMAP)LoadImage(NULL,"girl2.bmp",IMAGE_BITMAP,480,148,LR_LOADFROMFILE);  
115.    girl[3] = (HBITMAP)LoadImage(NULL,"girl3.bmp",IMAGE_BITMAP,480,148,LR_LOADFROMFILE);  
116.    bg = (HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,640,480,LR_LOADFROMFILE);  
117.  
118.    MyPaint(hdc);  
119.  
120.    return TRUE;  
121.}  
122.  
123.//****自定义绘图函数*********************************   
124.// 人物贴图坐标修正及窗口贴图   
void MyPaint(HDC hdc)  
{  
    int w,h;  
128.  
129.    //先在mdc中贴上背景图   
130.    SelectObject(bufdc,bg);  
131.    BitBlt(mdc,0,0,640,480,bufdc,0,0,SRCCOPY);  
132.  
133.    //按照目前的移动方向取出对应人物的连续走动图,并确定截取人物图的宽度与高度   
134.    SelectObject(bufdc,girl[dir]);  
135.    switch(dir)  
136.    {  
137.        case 0:  
138.            w = 55;  
139.            h = 74;  
140.            break;  
141.        case 1:  
142.            w = 53;  
143.            h = 77;  
144.            break;  
145.        case 2:  
146.            w = 60;  
147.            h = 74;  
148.            break;  
149.        case 3:  
150.            w = 60;  
151.            h = 74;  
152.            break;  
153.    }  
154.    //按照目前的X,Y的值在mdc上进行透明贴图,然后显示在窗口画面上   
155.    BitBlt(mdc,x,y,w,h,bufdc,num*w,h,SRCAND);  
156.    BitBlt(mdc,x,y,w,h,bufdc,num*w,0,SRCPAINT);  
157.      
158.    BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);  
159.  
160.    tPre = GetTickCount();         //记录此次绘图时间   
161.  
162.    num++;  
163.    if(num == 8)  
164.        num = 0;  
165.  
166.}  
  
//****消息处理函数***********************************   
// 1.按下【Esc】键结束程序   
// 2.按下方向键重设贴图坐标   
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)  
{  
    switch (message)  
    {  
175.        case WM_KEYDOWN:         //按下键盘消息   
176.            //判断按键的虚拟键码   
177.            switch (wParam)   
178.            {  
179.                case VK_ESCAPE:           //按下【Esc】键   
180.                    PostQuitMessage( 0 );  //结束程序   
181.                    break;  
182.                case VK_UP:               //按下【↑】键   
183.                    //先按照目前的移动方向来进行贴图坐标修正,并加入人物往上移动的量(每次按下一次按键移动10个单位),来决定人物贴图坐标的X与Y值,接着判断坐标是否超出窗口区域,若有则再次修正   
184.                    switch(dir)  
185.                    {  
186.                        case 0:   
187.                            y -= 10;  
188.                            break;  
189.                        case 1:  
190.                            x -= 1;  
191.                            y -= 8;  
192.                            break;  
193.                        case 2:   
194.                            x += 2;  
195.                            y -= 10;  
196.                            break;  
197.                        case 3:  
198.                            x += 2;  
199.                            y -= 10;  
200.                            break;  
201.                    }  
202.                    if(y < 0)  
203.                        y = 0;  
204.                    dir = 0;  
205.                    break;  
206.                case VK_DOWN:             //按下【↓】键   
207.                    switch(dir)  
208.                    {  
209.                        case 0:  
210.                            x += 1;  
211.                            y += 8;  
212.                            break;  
213.                        case 1:  
214.                            y += 10;  
215.                            break;  
216.                        case 2:  
217.                            x += 3;  
218.                            y += 6;  
219.                            break;  
220.                        case 3:  
221.                            x += 3;  
222.                            y += 6;  
223.                            break;  
224.                    }  
225.  
226.                    if(y > 375)  
227.                        y = 375;  
228.                    dir = 1;  
229.                    break;  
230.                case VK_LEFT:             //按下【←】键   
231.                    switch(dir)  
232.                    {  
233.                        case 0:  
234.                            x -= 12;  
235.                            break;  
236.                        case 1:  
237.                            x -= 13;  
238.                            y += 4;  
239.                            break;  
240.                        case 2:  
241.                            x -= 10;  
242.                            break;  
243.                        case 3:  
244.                            x -= 10;  
245.                            break;  
246.                    }  
247.                    if(x < 0)  
248.                        x = 0;  
249.                    dir = 2;  
250.                    break;  
251.                case VK_RIGHT:             //按下【→】键   
252.                    switch(dir)  
253.                    {  
                        case 0:  
                            x += 8;  
                           break;  
                        case 1:  
                           x += 7;  
                           y += 4;  
                            break;  
                        case 2:  
                            x += 10;  
                            break;  
                        case 3:  
                            x += 10;  
                            break;  
                    }  
                    if(x > 575)  
                        x = 575;  
                   dir = 3;  
                   break;  
            }  
            break;  
       case WM_DESTROY:                    //窗口结束消息   
           int i;  
 
            DeleteDC(mdc);  
            DeleteDC(bufdc);  
           for(i=0;i<4;i++)  
                DeleteObject(girl[i]);  
            DeleteObject(bg);  
            ReleaseDC(hWnd,hdc);  
 
            PostQuitMessage(0);  
           break;  
        default:                            //其他消息   
            return DefWindowProc(hWnd, message, wParam, lParam);  
   }  
   return 0;  
}  


这是MSDN上一个大牛写的代码,一个键盘输入的程序,但是运行起来D:\代码\新建\新建.cpp(1) : fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory
网上说去掉头文件这个,但是还是会出错。求解答@小甲鱼@牡丹花下死做鬼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-7 22:17:26 | 显示全部楼层
缺少预编译头文件,解决方法
一是:去掉链接选项的预编译宏
二是:随便建个工程,把stdafx.h拷贝过来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-7 22:39:55 | 显示全部楼层
你的工程里没有stdafx.h预编译头文件
可以去掉链接选项中的预编译或者随便建立一个windows程序工程,将stdafx.h添加到本工程里面来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-21 15:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表