如何用C语言编写一个窗体应用程序?

作者&投稿:沈秀 (若有异议请与网页底部的电邮联系)
怎么用C语言编写一个windows窗口?~

调用window库窗口函数即可创建windows窗口。
必须使用windows的编译器,如VC,MS等等。
RegisterClassEx函数:该函数注册在随后调用CreateWindow函数和CreateWindowEx函数中使用的窗口类。 RegisterClass函数己经由函数RegisterClassEx函数来代替,但是,如果不需要设置类的小目标则仍然可以使用RegisterClass函数。CreateWindowEx函数:该函数创建一个具有扩展风格的层叠式窗口、弹出式窗口或子窗口,其他与CreateWindow函数相同。关于创建窗口和其他参数的内容,请参看CreateWindow。具体仍可见微软的msdn。消息处理函数WindowProc:该函数是一个应用程序定义的函数。它处理发送给窗口的消息。WINDPROC类型定义了一个指向该回调函数的指针。WindowProc是用于应用程序定义函数的占位符。函数原型:LRESULT CALLBACK WindowProc (HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);参数:hwnd:指向窗口的句柄。uMsg:指定消息类型。wParam:指定其余的、消息特定的信息。该参数的内容与UMsg参数值有关。IParam:指定其余的、消息特定的信息。该参数的内容与uMsg参数值有关。返回值:返回值就是消息处理结果,它与发送的消息有关。一个简单的Window的代码如下:
#include #include LRESULT WINAPI WinProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);int WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd ){ TCHAR *szName = _T("myWindow"); WNDCLASSEX wc = {0}; HWND hWnd = NULL; MSG Msg = {0}; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.cbSize = sizeof(WNDCLASSEX); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//通过函数来设置一个白色的背景,这里大家设置为NULL看看,会很有趣的 wc.hCursor = NULL;//不设置 wc.hIcon = NULL;//不设置 wc.hIconSm = NULL;//不设置 wc.hInstance = hInstance;//当前程序的句柄,hInstance是有系统给传递的 wc.lpfnWndProc = WinProc;//窗口处理过程的回调函数。 wc.lpszClassName = szName;//窗口类的名字。 wc.lpszMenuName = NULL; wc.style = CS_HREDRAW | CS_VREDRAW; RegisterClassEx(&wc);//在系统中注册 hWnd = CreateWindowEx(WS_EX_CLIENTEDGE,szName,_T("我的窗口我喜欢"),WS_OVERLAPPEDWINDOW, 200,100,600,400,NULL,NULL,hInstance,NULL);//创建窗口,窗口标题为"我的窗口我喜欢" if(hWnd == NULL) { MessageBox(NULL,_T("There's an Error"),_T("Error Title"),MB_ICONEXCLAMATION|MB_OK); return 0; } ShowWindow(hWnd,nShowCmd);//显示窗口 UpdateWindow(hWnd); //下面是对消息的循环处理,大家先不必管这些,下节课我会细说的 while(GetMessage(&Msg,NULL,0,0)) { TranslateMessage(&Msg);//翻译消息 DispatchMessage(&Msg);//分派消息 } return Msg.message;}//消息处理函数LRESULT WINAPI WinProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam){ switch(Msg)//处理消息过程 { case WM_DESTROY://响应鼠标单击关闭按钮事件 PostQuitMessage(0);//退出消息队列 return 0;//退出函数 } return DefWindowProc(hWnd,Msg,wParam,lParam);}

生产窗体可以使用CreateWindowEx函数。函数功能:该函数创建一个具有扩展风格的层叠式窗口、弹出式窗口或子窗口,其他与CreateWindow函数相同。函数原型:CreateWindowEx函数创建一个层叠的,自动弹出的(pop-up)或是一个子窗口通过扩展格式。另外这个函数的作用与CreateWindow函数的作用相同。要获得更多的关于创建窗口的信息和关于CreateWindowEx函数参数的详细描述。参见CreateWindowHWND CreateWindowEx(DWOR DdwExStyle, //窗口的扩展风格LPCTSTR lpClassName, //指向注册类名的指针LPCTSTR lpWindowName, //指向窗口名称的指针DWORD dwStyle, //窗口风格int x, //窗口的水平位置int y, //窗口的垂直位置int nWidth, //窗口的宽度int nHeight, //窗口的高度HWND hWndParent, //父窗口的句柄HMENU hMenu, //菜单的句柄或是子窗口的标识符HINSTANCE hInstance, //应用程序实例的句柄LPVOID lpParam //指向窗口的创建数据);
例程:
include#includeLRESULT CALLBACK WinDouProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter);class CWnd{public: CWnd() { m_hWnd = NULL; } BOOL CreateEx( DWORD dwExStyle, // extended window style LPCTSTR lpClassName, // pointer to registered class name LPCTSTR lpWindowName, // pointer to window name DWORD dwStyle, // window style int x, // horizontal position of window int y, // vertical position of window int nWidth, // window width int nHeight, // window height HWND hWndParent, // handle to parent or owner window HMENU hMenu, // handle to menu or child-window identifier HANDLE hInstance, // handle to application instance LPVOID lpParam // pointer to window-creation data ); BOOL ShowWindow( int nCmdShow ); BOOL UpdateWindow();public: HWND m_hWnd;};BOOL CWnd::CreateEx( DWORD dwExStyle, // extended window style LPCTSTR lpClassName, // pointer to registered class name LPCTSTR lpWindowName, // pointer to window name DWORD dwStyle, // window style int x, // horizontal position of window int y, // vertical position of window int nWidth, // window width int nHeight, // window height HWND hWndParent, // handle to parent or owner window HMENU hMenu, // handle to menu or child-window identifier HANDLE hInstance, // handle to application instance LPVOID lpParam // pointer to window-creation data){ m_hWnd = ::CreateWindowEx (dwExStyle,lpClassName,lpWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,hMenu,(HINSTANCE)hInstance,lpParam); if(m_hWnd != NULL) return TRUE; else return FALSE;}BOOL CWnd::ShowWindow(int nCmdShow){ return ::ShowWindow(m_hWnd,nCmdShow);}BOOL CWnd::UpdateWindow(){ return ::UpdateWindow(m_hWnd);}int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // pointer to command line int nCmdShow // show state of window){ WNDCLASS wndclass; //先设计窗口类 wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hbrBackground = (HBRUSH)GetStockObject(DKGRAY_BRUSH); wndclass.hCursor = LoadCursor(NULL,IDC_HELP); wndclass.hIcon = LoadIcon(NULL,IDI_WARNING); wndclass.hInstance = hInstance; wndclass.lpfnWndProc = WinDouProc; wndclass.lpszClassName = "Magic_Maggie"; wndclass.lpszMenuName = 0; wndclass.style = CS_VREDRAW | CS_HREDRAW; //某一个变量原油几个变量去掉一个特征,可以用取反(~)后再进行与(&) //例如:style上去掉CS_NOCLOSE,可以style&~CS_NOCLOSE; RegisterClass(&wndclass); ///注意先建立再注册昂 CWnd wnd; wnd.CreateEx(NULL,"Magic_Maggie","DouDou",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hInstance,NULL); wnd.ShowWindow(SW_SHOWNORMAL); wnd.UpdateWindow(); MSG msg; //消息循环 while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); //触发WinDouProc } return 0;} LRESULT CALLBACK WinDouProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter){ switch(uMsg) { case WM_LBUTTONDOWN: MessageBox(hwnd,"您按下了鼠标左键昂","豆豆的程序",MB_OK); HDC hdc; hdc = GetDC(hwnd); //The GetDC function retrieves a handle to a display device context for the client area of a specified window or for the entire screen. You can use the returned handle in subsequent GDI functions to draw in the device context. TextOut(hdc,0,0,"感谢您对豆豆程序的支持昂",strlen("感谢您对豆豆程序的支持昂")); ReleaseDC(hwnd,hdc); break; case WM_CHAR: char szChar[20]; sprintf(szChar,"Char is %d",wParam); MessageBox(hwnd,szChar,"豆豆的程序",MB_OK); break; case WM_PAINT: PAINTSTRUCT ps; HDC hDc; hDc = BeginPaint(hwnd,&ps); TextOut(hDc,0,0,"这个是重绘滴哦",strlen("这个是重绘滴哦")); EndPaint(hwnd,&ps); break; case WM_CLOSE: //这个case与下边的destroy这个case不要弄错了,否则窗口不出现,但任务管理器中运行 if(IDYES == MessageBox(hwnd,"您真的要退出么?","豆豆的程序",MB_YESNO)) { DestroyWindow(hwnd); } break; case WM_DESTROY: PostQuitMessage(0); //////////////////////////////////////////????????????????????? break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); // 别忘记了return } return 0;}

要用C语言编写一个窗体应用程序需要调用系统或第三方提供的API函数,一般的步骤是:
定义窗口类
注册窗口类
创建窗口
显示、更新窗口
进行消息循环,不断处理窗口消息

最好不要,稍微麻烦一点的窗体程序你就搞不定,而且资料非常少
比较合算的应该是C#的WPF, VC的MFC,都不是C语言的

目前使用使用QT和C++做应用,

win32编程

可以看看win32编程。


C语言中如何编写一个字符串复制函数,并在主函数中调用它。
可以利用字符指针结合while循环的方式来编写字符串复制函数。具体实现方法可以参考如下程序:include<stdio.h>void str_copy(char *str1, char *str2) \/\/ 字符串复制函数{ while(*str1++ = *str2++); \/\/ 将字符串str2中的每个字符逐个复制到str1中,直到遇到字符串结束字符'\\0'}void ma...

怎样用C语言编写一个简单的程序?
下面是一个简单的例子,它展示了如何手动输入 7 个元素,然后求这 7 个元素的和,并输出最大值和最小值。include <stdio.h> int main(){ int a[7]; \/\/ 建立一个 7 元素的数组 int i;int sum = 0;int max = a[0];int min = a[0];\/\/ 手动输入 7 个元素 for (i = 0; i ...

如何编写一个C语言的程序?
如果您想在没有编译器的电脑上编写 C 语言程序,可以使用在线编程环境。这些环境通常提供一个网页界面,允许您在浏览器中编写、编译和运行 C 代码。有许多不同的在线编程环境可供选择,例如:Repl.it CodeChef Jdoodle 使用在线编程环境的步骤通常是:在网站上注册一个帐户。创建一个新的 "项目"。选择 ...

如何用c语言编写一个程序?
include<stdio.h> int main(){ int i,m=0;for(i=2;i<=100;i+=2) m=m+i;printf("%d\\n",m);return 0;} 或 include int main(){ int i,sum=0;for(i=1;i<=50;i++){ sum=sum+2*i;} printf("2+4+6+…+98+100=%d\\n",sum);return 0;} ...

用c语言编写一个计算器。
include<stdio.h> int main(){ int a,b,c,max;printf("请输入三个数:\\n");scanf("%d%d%d",&a,&b,&c);if(a>b)max=a;if(c>max)max = c;printf("三个数中最大的数为:%d",max);return 0;}

C语言编写一个软件(如何用c语言编写一个真正的软件)
1、首先打开pellesC,创建一个新的项目文件。2、然后输入简单的框架。3、接着用switch函数完成加减乘除操作。4、检查输入之后就可以计算结果了。这里需要添加的代码如下,之后便可以运行了。5、这里我们输入一个例子。

如何用c语言编写一个能够正确运行的程序?
--- 最后,对于C语言指针这个对初学者很难懂的内容,建议翻阅 “征服C指针”一书。大概看懂3,4章,你对C语言就算真正入门了。By the way,初学者在代码里,如果有重复对一个数组赋值使用的情况,建议不管三七二十一使用 memset() 过度使用也没有关系(对初学者而言),好的习惯可以让学习之路更顺...

用C语言编写一个简单程序,有哪些步骤,可以举一个例子详细讲解下吗?_百 ...
\/\/以Helloworld示例 \/\/先使用编辑工具如windows的记事本或vc++环境,或linux的vim编辑器创建一个hello.c文件 \/\/打开文件后,如下 步骤写程序 include <stdio.h>\/\/首先要引入c语言的标准输入输出库文件,因为这个文件里有已经定义好的可以使用的函数 \/\/接下来需要写一个main函数,这也是c语言程序里必...

c语言编程,用while语句编写一个程序
代码为:const double pi=3.14;double a=10;while(a<=180){ printf("角度:%6d\\t,正弦:%10.6f\\t,sin(a*pi\/180),10.6f\\n " a,余弦:cos(a*pi\/180)),a=a+10;} 输出结果如下图:

如何用c语言编写一个计算素数的程序?
print("\\n共计%d个素数。" % count)程序中首先定义了一个名为isPrime的函数,用于判断一个数是否为素数。当n小于等于1时,直接返回False;当n大于1时,对于从2到n的平方根的所有数进行判断,如果n能够被这些数整除,则n不是素数;如果不存在这样的数,则n是素数。接下来,程序使用循环从2到999...

上杭县18510395767: 怎么用c语言写窗体程序 -
封航异福: 步骤: 1、注册窗口类; 2、创建窗体; 3、消息循环; 4、编写窗口消息处理函数. 代码:#include <windows.h> #include<tchar.h> LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); int ...

上杭县18510395767: 【】用c语言编一个windows窗体应用程序【】 -
封航异福: 用GetDlgItemText函数把textbox1的内容送到字符串里 利用atof函数转换成double型,然后自加,再把这个double型数字转换成字符串,用SetDlgItemText就能放到textbox2中了

上杭县18510395767: 用纯C语言写窗体程序的教程 -
封航异福: 这个你真的得去问大神了.如果是纯c语言去写窗体程序,可以说是很不实际的.我建议你现在可以去学习c++了,在vc环境下借助MFC(微软基准类库)去写窗体应用程序,写窗体应用程序都是利用别人已经写好的东西去实现的.如果你再往后学面向对象,c#,java等你会发现写个窗体应用程序实在是太简单了,但其实它们的基础都是c语言,学好c语言还是很重要的.

上杭县18510395767: 怎么用C写个窗口程序 -
封航异福: 最简单的窗口程序由1个回调函数和程序入口函数WinMain(类似于命令行程序的入口函数为main)构成. 范例很多,比如Dev-C++中默认建立的C语言窗口工程(Windows Application)代码,篇幅原因无法粘贴,见参考资料.

上杭县18510395767: 如何利用C语言编写窗口程序,即有界面的 -
封航异福: 如果是开发windows程序,调用windows的api函数创建窗口. 建议从头开始看《windows程序设计》. 如果是linux,使用GTK+开发.

上杭县18510395767: 如何用c编一个窗体啊?? -
封航异福: 弹出非模态窗口,复习下模态与非模态窗口的概念. 在建工程时选择多文本模式,如果间的事对话框模式的话,可以采用非模态对话框

上杭县18510395767: c语言怎么做窗体啊
封航异福: 请问您是想自己画窗体还是想调用界面库的现成的窗体? 如果是想用现成的,那您必须先有现成的界面库; 如果是想自己画,您可以调用C的绘图接口函数绘制窗体,并且要自己编写事件处理函数

上杭县18510395767: C语言写一个窗口程序怎么写?
封航异福: 你的意思是怎样给C程序加一个程序界面,就像windows窗口一样? 建议在VC 6.0下运行,VC 不是语言,他只是一个集成开发环境(也叫IDE) 他提供控件让我们可以把程序作成窗口的模式 也就是你说的那样

上杭县18510395767: 如何用C语言创建windows窗体程序 -
封航异福: API应用程序编程接口

上杭县18510395767: 用C语言编写一个简单的窗口程序,对句子进行分析. -
封航异福: www .quanxue .cn/JC_CLanguage/Sdk/Sdk02.html 看看就知道了,基本窗口程序一般的ide都有向导建立的,你用的c-free没有吗?没用过...自己删除一下网址的空格...百度不给放链接的...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网