很多学C的朋友认为C语言只能写DOS程序,而不能像C#那样写windows窗体的程序,这你可就打错特错了,今天我来简单掩饰下C语言怎么利用windows提供出来的API写windows窗体程序。
开发工具 VC6.0,开发平台windows7。
首先第一步,打开VC,新建工程,选择win32 application,如下图
然后新建一个C语言源文件,这个就不截图了,如果这也不会的话相信你也不会来看这篇帖子~呵呵
建好文件以后把一下代码输入进去。编译即可~代码讲解会下帖子下方
1.#include <windows.h>
2.
3.LRESULT CALLBACK WindoWProc(
4. HWND hwnd, // handle to window
5. UINT uMsg, // message identifier
6. WPARAM wParam, // first message parameter
7. LPARAM lParam // second message parameter
8. );
9.
10.
11.int WINAPI WinMain(HINSTANCE hInstance,
12. HINSTANCE hPrevInstance,
13. LPSTR lpCmdLine,
14. int nShowCmd
15. )//入口函数
16.{
17. WNDCLASS wndclass;
18. HWND wndhwnd;
19. MSG msg;
20. wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//加载图标
21. wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//加载鼠标样式
22. wndclass.style=CS_VREDRAW | CS_HREDRAW;//窗口样式
23. wndclass.lpfnWndProc=WindowProc;//窗口过程回调函数
24. wndclass.cbClsExtra=0;//类额外内存
25. wndclass.cbWndExtra=0;//窗口额外内存
26. wndclass.hInstance=hInstance;//
27. wndclass.hbrBackground=(HBRUSH)GetStockObject(SYSTEM_FONT);//窗口颜
28. wndclass.lpszMenuName=NULL;//窗口菜单
29. wndclass.lpszClassName="testWindow";//窗口类名
30.
31. RegisterClass(&wndclass);
32. wndhwnd=CreateWindow("testWindow","windows",WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX,
33. CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
34. NULL,NULL,hInstance,NULL);
35. ShowWindow(wndhwnd,SW_SHOWNORMAL);
36. UpdateWindow(wndhwnd);
37. while(GetMessage(&msg,NULL,0,0))
38. {
39. TranslateMessage(&msg);
40. DispatchMessage(&msg);
41. }
42.
43. return 0;
44.}
45.
46.LRESULT CALLBACK WindowProc(
47. HWND hwnd, // handle to window
48. UINT uMsg, // message identifier
49. WPARAM wParam, // first message parameter
50. LPARAM lParam // second message parameter
51. )
52.{
53. HDC hdc,hDC;
54. PAINTSTRUCT ps;
55. char szchar[20];
56. static int i=0;
57. switch (uMsg)
58. {
59. case WM_PAINT://窗口重绘消息,窗口加载和重绘的时候产生该消息
60. hdc=BeginPaint(hwnd,&ps);
61. TextOut(hdc,0,0,"窗口加载完成",strlen("窗口加载完成"));//往窗口输出文本
62. //MessageBox(hwnd,"Hello World","Hi",MB_OK);
63. EndPaint(hwnd,&ps);
64.
65. break;
66. case WM_CHAR://处理键盘按键消息
67. sprintf(szchar,"char is %c",wParam);
68. MessageBox(hwnd,szchar,"提示",MB_OK);
69. break;
70. case WM_LBUTTONDOWN://处理鼠标左键按下消息
71. MessageBox(hwnd,"mouse click","提示",MB_OK);
72. hDC=GetDC(hwnd);
73. TextOut(hDC,0,50,"鼠标事件处理时显示文字",strlen("鼠标事件处理时显示文字"));
74. ReleaseDC(hwnd,hDC);
75. break;
76. case WM_CLOSE://窗口关闭消息
77. if(IDYES==MessageBox(hwnd,"你确定要关闭吗?","提示",MB_YESNO))
78. DestroyWindow(hwnd);
79. break;
80. case WM_DESTROY:
81. PostQuitMessage(0);
82. break;win10编程c语言用什么软件
83. default:
84. return DefWindowProc(hwnd,uMsg,wParam,lParam);//使用缺省值来调用窗口过程函数
85. }
86. return 0;
87.}
复制代码
要说明的事,windows程序必须包含的头文件就是windows.h,而程序的入口函数叫做WinMain(dos的入口函数叫main),如果搞不清有几个参数,参数怎么写,可以查阅MSDN,WindowProc函数是窗口过程函数,也就是处理窗口消息的函数;
先来看winamin函数内部,首先定义了一个WNDCLASS类型的数据,这个类型是windows提供出来的结构体,他里面有10个成员。相当于是用来创建windows窗体类的,至于里面的参
数,建议查阅MSDN,这里只对hbrBackground和lpszClassName进行说明,hbrBackground是设置窗口背景的,要调用函数GetStockObject设置,一般设置成系统的就好了最后记得要把返回值强制转换成HBRUSH类型哦~,lpszClassName是这个窗体类的名字。这个很重要,窗口创建的时候需要,好了,现在创建了一个窗口类了,然后要注册他,用RegisterClass函数,把刚才定义的WNDCLASS类型的变量地址穿进去即可注册,接下来就是创建窗口,用到函数CreateWindow,参数自己查阅MSDN即可,然后调用ShowWindow函数,把CreateWindow返回的HWND类型参数穿进去,窗口即可再后台运行(因为还没有写窗口过程的回调函数,所以只能在后台运行)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论