c写windows窗体程序
来源:互联网 发布:开淘宝店服装去哪进货 编辑:程序博客网 时间:2024/05/10 02:20
转自:http://www.bcwhy.com/thread-14423-1-1.html
首先第一步,打开VC,新建工程,选择win32 application,如下图
然后新建一个C语言源文件,这个就不截图了,如果这也不会的话相信你也不会来看这篇帖子~呵呵
建好文件以后把一下代码输入进去。编译即可~代码讲解会下帖子下方
#include <windows.h>LRESULT CALLBACK WindoWProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter );int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )//入口函数{ WNDCLASS wndclass; HWND wndhwnd; MSG msg; wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//加载图标 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//加载鼠标样式 wndclass.style=CS_VREDRAW | CS_HREDRAW;//窗口样式 wndclass.lpfnWndProc=WindowProc;//窗口过程回调函数 wndclass.cbClsExtra=0;//类额外内存 wndclass.cbWndExtra=0;//窗口额外内存 wndclass.hInstance=hInstance;// wndclass.hbrBackground=(HBRUSH)GetStockObject(SYSTEM_FONT);//窗口颜色 wndclass.lpszMenuName=NULL;//窗口菜单 wndclass.lpszClassName="testWindow";//窗口类名 RegisterClass(&wndclass); wndhwnd=CreateWindow("testWindow","windows",WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInstance,NULL); ShowWindow(wndhwnd,SW_SHOWNORMAL); UpdateWindow(wndhwnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0;}LRESULT CALLBACK WindowProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ){ HDC hdc,hDC; PAINTSTRUCT ps; char szchar[20]; static int i=0; switch (uMsg) { case WM_PAINT://窗口重绘消息,窗口加载和重绘的时候产生该消息 hdc=BeginPaint(hwnd,&ps); TextOut(hdc,0,0,"窗口加载完成",strlen("窗口加载完成"));//往窗口输出文本 //MessageBox(hwnd,"Hello World","Hi",MB_OK); EndPaint(hwnd,&ps); break; case WM_CHAR://处理键盘按键消息 sprintf(szchar,"char is %c",wParam); MessageBox(hwnd,szchar,"提示",MB_OK); break; case WM_LBUTTONDOWN://处理鼠标左键按下消息 MessageBox(hwnd,"mouse click","提示",MB_OK); hDC=GetDC(hwnd); TextOut(hDC,0,50,"鼠标事件处理时显示文字",strlen("鼠标事件处理时显示文字")); ReleaseDC(hwnd,hDC); break; case WM_CLOSE://窗口关闭消息 if(IDYES==MessageBox(hwnd,"你确定要关闭吗?","提示",MB_YESNO)) DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam);//使用缺省值来调用窗口过程函数 } return 0;}
1.windows程序必须包含的头文件就是windows.h,而程序的入口函数叫做WinMain(dos的入口函数叫main),如果搞不清有几个参数,参数怎么写,可以查阅MSDN,WindowProc函数是窗口过程函数,也就是处理窗口消息的函数;
先来看winamin函数内部,首先定义了一个WNDCLASS类型的数据,这个类型是windows提供出来的结构体,他里面有10个成员。相当于是用来创建windows窗体类的,至于里面的参数,建议查阅MSDN,这里只对hbrBackground和lpszClassName进行说明,hbrBackground是设置窗口背景色的,要调用函数GetStockObject设置,一般设置成系统的就好了最后记得要把返回值强制转换成HBRUSH类型哦~,lpszClassName是这个窗体类的名字。这个很重要,窗口创建的时候需。。
2.现在创建了一个窗口类了,然后要注册他,用RegisterClass函数,把刚才定义的WNDCLASS类型的变量地址穿进去即可注册,接下来就是创建窗口,用到函数CreateWindow,参数自己查阅MSDN即可,然后调用ShowWindow函数,把CreateWindow返回的HWND类型参数穿进去,窗口即可再后台运行(因为还没有写窗口过程的回调函数,所以只能在后台运行)。
3.GetMessage是整个程序的关键,函数检索消息从调用线程的消息队列。函数分派传入发送消息到一个消息是用于检索,TranslateMessage函数是用来转换消息的,把我们获取到的消息转化成系统能接受的消息,DispatchMessage函数是从系统消息队列中取出消息。
4.接下来只要把回调函数写完即可,首先要把回调函数的函数名赋值给winmian里面的wndclass.lpfnWndProc,回调函数是处理窗口产生的消息的,其中WM_PAINT消息在窗口构建和每次重绘的时候都会产生,可以把要初始化的数据写在改消息处理的代码里面,窗口关闭的时候会产生WM_CLOSE消息,碰到这个消息,要调用函数DestroyWindow,参数是窗口的句柄,调用完这个函数窗口就被销毁了,也就是你看不到窗口了,但是窗口的线程还在,这个时候会产生一个叫WM_DESTROY的消息,通常来说如果要做恶意程序都是检测到了WM_CLOSE消息销毁窗口,但是不响应WM_DESTROY的消息,如果要结束这个窗口的进程,只要在处理这个消息的时候调用PostQuitMessage函数即可,参数为0;
5.一定不要忘了:
default: return DefWindowProc(hwnd,uMsg,wParam,lParam);//使用缺省值来调用窗口过程函数
这是对我们没有处理的消息采用缺省的方式显示,没有该行代码程序也不能正常执行。最后消息在处理到PostQuitMessage返回值的时候winmian函数里面的GetMessage函数也会返回0,最后整个函数结束。GetMessage是要写在循环里面获取消息的,因为他不断的获取消息,调用窗口过程的回调函数,程序才能正常执行。
- c写windows窗体程序
- C如何写窗体程序
- 【C#】 .net入门之Windows窗体程序
- 用C#手动写一个Windows窗体程序
- PHP写窗体程序
- Windows窗体程序
- C#Windows窗体程序:用trackBar控件制作调色板
- c#windows窗体程序设计
- 窗体程序调C写DLL(其中调C++写DLL),Runtime Error
- C写windows窗体,(我原来一直以为C不能写gui界面,原来是我太菜了)
- C# windows frist 窗体程序
- 第一个Windows窗体程序
- windows窗体程序的创建
- WINDOWS下与LINUX下写C程序的区别
- 记事本中写c/c++程序在Windows下执行
- C#Windows窗体的控件
- windows窗体实例(C++)
- C#.net实现windows窗体程序对Excel文件的读写操作
- 从本地选取相册和相机拍照
- the compact org-mode guide 第四章
- 土地利用规划环境评价的意义
- boost::serialization 多态(polymorphic)序列化技巧及分析
- poj-1035
- c写windows窗体程序
- 数据库导入与导出 imp exp
- 最最爱的小麦2
- 人情世故,总是那么的纷繁复杂
- struts中的helloword(1)
- 子元素的margin-top与父元素合并的问题
- Cocos2d-x内存管理浅说
- Shell编程笔记——列出目录下文件的文件名并做循环操作
- redis