很多学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小时内删除。