鱼C论坛

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

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

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

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

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

x
  1. #include "stdafx.h"
  2. #include <stdio.h>   
  3.   
  4. //全局变量声明   
  5. HINSTANCE hInst;  
  6. HBITMAP girl[4],bg;  
  7. HDC     hdc,mdc,bufdc;  
  8. HWND    hWnd;  
  9. DWORD   tPre,tNow;  
  10. int     num,dir,x,y;       //x,y变量为人物贴图坐标,dir为人物移动方向,这里我们中以0,1,2,3代表人物上,下,左,右方向上的移动:num为连续贴图中的小图编号   
  11.   
  12. //全局函数声明   
  13. ATOM                MyRegisterClass(HINSTANCE hInstance);  
  14. BOOL                InitInstance(HINSTANCE, int);  
  15. LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);  
  16. void                MyPaint(HDC hdc);  
  17.   
  18. //****WinMain函数,程序入口点函数***********************   
  19. int APIENTRY WinMain(HINSTANCE hInstance,  
  20.                      HINSTANCE hPrevInstance,  
  21.                      LPSTR     lpCmdLine,  
  22.                      int       nCmdShow)  
  23. {  
  24.     MSG msg;  
  25.   
  26.   MyRegisterClass(hInstance);  

  27.     //初始化   
  28.     if (!InitInstance (hInstance, nCmdShow))   
  29.    {  
  30.         return FALSE;  
  31.    }  
  32.   
  33.      GetMessage(&msg,NULL,NULL,NULL);            //初始化msg     
  34.     //消息循环   
  35.     while( msg.message!=WM_QUIT )  
  36.     {  
  37.         if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE) )  
  38.         {  
  39. 40.            TranslateMessage( &msg );  
  40. 41.            DispatchMessage( &msg );  
  41. 42.        }  
  42. 43.        else  
  43. 44.        {  
  44. 45.            tNow = GetTickCount();  
  45. 46.            if(tNow-tPre >= 40)  
  46. 47.                MyPaint(hdc);  
  47.         }  
  48.     }  
  49.   
  50.     return msg.wParam;  
  51. }  
  52.   
  53. //****设计一个窗口类,类似填空题,使用窗口结构体*******************   
  54. ATOM MyRegisterClass(HINSTANCE hInstance)  
  55. {  
  56.     WNDCLASSEX wcex;  

  57.     wcex.cbSize = sizeof(WNDCLASSEX);   
  58.     wcex.style          = CS_HREDRAW | CS_VREDRAW;  
  59. 61.    wcex.lpfnWndProc    = (WNDPROC)WndProc;  
  60. 62.    wcex.cbClsExtra     = 0;  
  61. 63.    wcex.cbWndExtra     = 0;  
  62. 64.    wcex.hInstance      = hInstance;  
  63.     wcex.hIcon          = NULL;  
  64.     wcex.hCursor        = NULL;  
  65.     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);  
  66. 68.    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);  
  67. 69.    wcex.lpszMenuName   = NULL;  
  68. 70.    wcex.lpszClassName  = "canvas";  
  69. 71.    wcex.hIconSm        = NULL;  
  70. 72.  
  71. 73.    return RegisterClassEx(&wcex);  
  72. }  
  73.   
  74. //****初始化函数*************************************   
  75. // 加载位图并设定各种初始值   
  76. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)  
  77. {  
  78.     HBITMAP bmp;  
  79.     hInst = hInstance;  

  80.     hWnd = CreateWindow("canvas", "绘图窗口" , WS_OVERLAPPEDWINDOW,  
  81.         CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);  
  82.   
  83. 86.    if (!hWnd)  
  84. 87.    {  
  85. 88.        return FALSE;  
  86. 89.    }  
  87. 90.  
  88. 91.    MoveWindow(hWnd,10,10,640,480,true);  
  89. 92.    ShowWindow(hWnd, nCmdShow);  
  90. 93.    UpdateWindow(hWnd);  
  91. 94.  
  92. 95.    hdc = GetDC(hWnd);  
  93. 96.    mdc = CreateCompatibleDC(hdc);  
  94. 97.    bufdc = CreateCompatibleDC(hdc);  
  95. 98.  
  96. 99.  
  97. 100.    //建立空的位图并置入mdc中   
  98. 101.    bmp = CreateCompatibleBitmap(hdc,640,480);  
  99. 102.    SelectObject(mdc,bmp);  
  100. 103.  
  101. 104.  
  102. 105.    //设定人物贴图初始位置和移动方向   
  103. 106.    x = 300;  
  104. 107.    y = 250;  
  105. 108.    dir = 0;  
  106. 109.    num = 0;  
  107. 110.  
  108. 111.    //载入各连续移动位图及背景图   
  109. 112.    girl[0] = (HBITMAP)LoadImage(NULL,"girl0.bmp",IMAGE_BITMAP,440,148,LR_LOADFROMFILE);  
  110. 113.    girl[1] = (HBITMAP)LoadImage(NULL,"girl1.bmp",IMAGE_BITMAP,424,154,LR_LOADFROMFILE);  
  111. 114.    girl[2] = (HBITMAP)LoadImage(NULL,"girl2.bmp",IMAGE_BITMAP,480,148,LR_LOADFROMFILE);  
  112. 115.    girl[3] = (HBITMAP)LoadImage(NULL,"girl3.bmp",IMAGE_BITMAP,480,148,LR_LOADFROMFILE);  
  113. 116.    bg = (HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,640,480,LR_LOADFROMFILE);  
  114. 117.  
  115. 118.    MyPaint(hdc);  
  116. 119.  
  117. 120.    return TRUE;  
  118. 121.}  
  119. 122.  
  120. 123.//****自定义绘图函数*********************************   
  121. 124.// 人物贴图坐标修正及窗口贴图   
  122. void MyPaint(HDC hdc)  
  123. {  
  124.     int w,h;  
  125. 128.  
  126. 129.    //先在mdc中贴上背景图   
  127. 130.    SelectObject(bufdc,bg);  
  128. 131.    BitBlt(mdc,0,0,640,480,bufdc,0,0,SRCCOPY);  
  129. 132.  
  130. 133.    //按照目前的移动方向取出对应人物的连续走动图,并确定截取人物图的宽度与高度   
  131. 134.    SelectObject(bufdc,girl[dir]);  
  132. 135.    switch(dir)  
  133. 136.    {  
  134. 137.        case 0:  
  135. 138.            w = 55;  
  136. 139.            h = 74;  
  137. 140.            break;  
  138. 141.        case 1:  
  139. 142.            w = 53;  
  140. 143.            h = 77;  
  141. 144.            break;  
  142. 145.        case 2:  
  143. 146.            w = 60;  
  144. 147.            h = 74;  
  145. 148.            break;  
  146. 149.        case 3:  
  147. 150.            w = 60;  
  148. 151.            h = 74;  
  149. 152.            break;  
  150. 153.    }  
  151. 154.    //按照目前的X,Y的值在mdc上进行透明贴图,然后显示在窗口画面上   
  152. 155.    BitBlt(mdc,x,y,w,h,bufdc,num*w,h,SRCAND);  
  153. 156.    BitBlt(mdc,x,y,w,h,bufdc,num*w,0,SRCPAINT);  
  154. 157.      
  155. 158.    BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);  
  156. 159.  
  157. 160.    tPre = GetTickCount();         //记录此次绘图时间   
  158. 161.  
  159. 162.    num++;  
  160. 163.    if(num == 8)  
  161. 164.        num = 0;  
  162. 165.  
  163. 166.}  
  164.   
  165. //****消息处理函数***********************************   
  166. // 1.按下【Esc】键结束程序   
  167. // 2.按下方向键重设贴图坐标   
  168. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)  
  169. {  
  170.     switch (message)  
  171.     {  
  172. 175.        case WM_KEYDOWN:         //按下键盘消息   
  173. 176.            //判断按键的虚拟键码   
  174. 177.            switch (wParam)   
  175. 178.            {  
  176. 179.                case VK_ESCAPE:           //按下【Esc】键   
  177. 180.                    PostQuitMessage( 0 );  //结束程序   
  178. 181.                    break;  
  179. 182.                case VK_UP:               //按下【↑】键   
  180. 183.                    //先按照目前的移动方向来进行贴图坐标修正,并加入人物往上移动的量(每次按下一次按键移动10个单位),来决定人物贴图坐标的X与Y值,接着判断坐标是否超出窗口区域,若有则再次修正   
  181. 184.                    switch(dir)  
  182. 185.                    {  
  183. 186.                        case 0:   
  184. 187.                            y -= 10;  
  185. 188.                            break;  
  186. 189.                        case 1:  
  187. 190.                            x -= 1;  
  188. 191.                            y -= 8;  
  189. 192.                            break;  
  190. 193.                        case 2:   
  191. 194.                            x += 2;  
  192. 195.                            y -= 10;  
  193. 196.                            break;  
  194. 197.                        case 3:  
  195. 198.                            x += 2;  
  196. 199.                            y -= 10;  
  197. 200.                            break;  
  198. 201.                    }  
  199. 202.                    if(y < 0)  
  200. 203.                        y = 0;  
  201. 204.                    dir = 0;  
  202. 205.                    break;  
  203. 206.                case VK_DOWN:             //按下【↓】键   
  204. 207.                    switch(dir)  
  205. 208.                    {  
  206. 209.                        case 0:  
  207. 210.                            x += 1;  
  208. 211.                            y += 8;  
  209. 212.                            break;  
  210. 213.                        case 1:  
  211. 214.                            y += 10;  
  212. 215.                            break;  
  213. 216.                        case 2:  
  214. 217.                            x += 3;  
  215. 218.                            y += 6;  
  216. 219.                            break;  
  217. 220.                        case 3:  
  218. 221.                            x += 3;  
  219. 222.                            y += 6;  
  220. 223.                            break;  
  221. 224.                    }  
  222. 225.  
  223. 226.                    if(y > 375)  
  224. 227.                        y = 375;  
  225. 228.                    dir = 1;  
  226. 229.                    break;  
  227. 230.                case VK_LEFT:             //按下【←】键   
  228. 231.                    switch(dir)  
  229. 232.                    {  
  230. 233.                        case 0:  
  231. 234.                            x -= 12;  
  232. 235.                            break;  
  233. 236.                        case 1:  
  234. 237.                            x -= 13;  
  235. 238.                            y += 4;  
  236. 239.                            break;  
  237. 240.                        case 2:  
  238. 241.                            x -= 10;  
  239. 242.                            break;  
  240. 243.                        case 3:  
  241. 244.                            x -= 10;  
  242. 245.                            break;  
  243. 246.                    }  
  244. 247.                    if(x < 0)  
  245. 248.                        x = 0;  
  246. 249.                    dir = 2;  
  247. 250.                    break;  
  248. 251.                case VK_RIGHT:             //按下【→】键   
  249. 252.                    switch(dir)  
  250. 253.                    {  
  251.                         case 0:  
  252.                             x += 8;  
  253.                            break;  
  254.                         case 1:  
  255.                            x += 7;  
  256.                            y += 4;  
  257.                             break;  
  258.                         case 2:  
  259.                             x += 10;  
  260.                             break;  
  261.                         case 3:  
  262.                             x += 10;  
  263.                             break;  
  264.                     }  
  265.                     if(x > 575)  
  266.                         x = 575;  
  267.                    dir = 3;  
  268.                    break;  
  269.             }  
  270.             break;  
  271.        case WM_DESTROY:                    //窗口结束消息   
  272.            int i;  

  273.             DeleteDC(mdc);  
  274.             DeleteDC(bufdc);  
  275.            for(i=0;i<4;i++)  
  276.                 DeleteObject(girl[i]);  
  277.             DeleteObject(bg);  
  278.             ReleaseDC(hWnd,hdc);  

  279.             PostQuitMessage(0);  
  280.            break;  
  281.         default:                            //其他消息   
  282.             return DefWindowProc(hWnd, message, wParam, lParam);  
  283.    }  
  284.    return 0;  
  285. }  

复制代码



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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-7 11:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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