最近有个同学的程序需要用对话框的方式实现,但前面都是通过黑框形式完成的,老师突然让增加一个界面,本来准备采用MFC完成的,但后来一想,该程序核心东西是体现在它的算法上,控制台的程序并非不好.转念一想,如果使用MFC这样的方法好像需要再倒腾一遍,想到了大一在"C语言能干大事"中的东西,所以就准备采用这种形式直接完成,投机取巧的方法.
        主要是通过调用Windows API界面的CreateWindows函数完成,同时也能创建按钮,把参数设置为button,如果想响应该按钮,只需在回调函数中增加消息WM_COMMAND判断即可.代码如下:

#include<windows.h>
#include<stdio.h>//声明回调函数
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;//主函数 程序入口
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{static TCHAR szAppName[] = TEXT ("HelloWin") ;HWND         hwnd ;        //用来保存成功创建窗口后返回的句柄MSG          msg ;         //定义消息结构体变量WNDCLASS     wndclass ;    //窗体类wndclass.style         = CS_HREDRAW | CS_VREDRAW ; //指定窗口风格wndclass.lpfnWndProc   = WndProc ; 函数指针,指向处理窗口消息的函数入口wndclass.cbClsExtra    = 0 ;       //结构体后附加的字节数,一般总为0wndclass.cbWndExtra    = 0 ;       //窗体实例附加的字节数,一般总为0wndclass.hInstance     = hInstance ;                          //模块句柄wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;   //图标句柄 任务栏显示的图标wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;       //光标句柄wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //背景颜色COLOR_BACKGROUNDwndclass.lpszMenuName  = NULL ;      //菜单名的字符串wndclass.lpszClassName = szAppName ; //自定义类名,不要与其他类名重复if (!RegisterClass (&wndclass)){MessageBox (NULL, TEXT ("注册类失败!"), szAppName, MB_ICONERROR) ;return 0 ;}int x =((GetSystemMetrics(SM_CXSCREEN)/2)-200); //x居中int y =((GetSystemMetrics(SM_CYSCREEN)/2)-200); //y居中//创建窗体APIhwnd = CreateWindow(szAppName,TEXT("毕业设计"),WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,x,y,400,400,NULL,NULL,hInstance,NULL);//显示窗体的API 传入需要显示的窗体句柄和显示方式ShowWindow(hwnd,iCmdShow);//刷新窗体的APIUpdateWindow(hwnd);//从系统的应用程序线程消息队列中取得一个消息while(GetMessage(&msg,NULL,0,0) > 0){DispatchMessage(&msg);}return msg.wParam;
}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{HDC             hdc;             //句柄PAINTSTRUCT    ps;RECT             rect;            //矩形HINSTANCE       hInstance;       //窗口实例static HWND     hwndButton[2];   //按钮句柄switch (message){        case WM_CREATE: //创建按钮{hInstance = ((LPCREATESTRUCT)lParam)->hInstance;//按钮1hwndButton[0] = CreateWindow("BUTTON","训练",      WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,  10,10,100,100,hwnd,NULL,(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);//按钮2hwndButton[1] = CreateWindow("BUTTON","获取",      WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,  10,250,100,100,hwnd,NULL,(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);return 0;}case WM_PAINT: //绘制文字hdc = BeginPaint(hwnd,&ps);GetClientRect(hwnd,&rect);DrawText(hdc,TEXT("By:Eastmount CSDN制作"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);EndPaint(hwnd,&ps);return 0;case WM_COMMAND: //响应按钮消息if((HWND)lParam == hwndButton[0]){MessageBox(NULL,TEXT("是否训练图片?"),TEXT("提示"),MB_YESNO|MB_ICONQUESTION);}if((HWND)lParam == hwndButton[1]){MessageBox(NULL,TEXT("是否获取图片?"),TEXT("提示"),MB_YESNO|MB_ICONQUESTION);}return 0;case WM_CLOSE: //关闭if(IDYES==MessageBox(hwnd,"是否关闭程序?","提示",MB_YESNO|MB_ICONQUESTION)){DestroyWindow (hwnd);   }return 0;case WM_DESTROY: //退出程序PostQuitMessage (0) ;return 0 ;}return DefWindowProc (hwnd, message, wParam, lParam) ;
}

        程序运行结果如下图所示:

 

        其中主要涉及到的函数原型如下所示:

//创建窗体
hwnd = CreateWindow (szClassName,         /* Classname */"Windows App",       /* Title Text */WS_OVERLAPPEDWINDOW, /* default window */CW_USEDEFAULT,       /* Windows decides the position */CW_USEDEFAULT,       /* where the window ends up on the screen */544,                 /* The programs width */375,                 /* and height in pixels */HWND_DESKTOP,        /* The window is a child-window to desktop */NULL,                /* No menu */hThisInstance,       /* Program Instance handler */NULL                 /* No Window Creation data */
);
//创建按钮
hwndButton = CreateWindow( "BUTTON",   // predefined class "OK",       // button text WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,  // styles  10,         // starting x position 10,         // starting y position 100,        // button width 100,        // button height hwnd,       // parent window NULL,       // No menu (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL        // pointer not needed
); 

最后,写这篇文章主要是怀念自己大一时的生活,从一个什么都不知道的孩子,通过学习C语言,C语言能干大事开始接触编程.同时,我认为这个程序也是非常还的入门程序,希望刚接触程序的同学也可以看看,编编自己感兴趣的程序、写写博客、AC题目、编写游戏、聊天软件、移动开发,能从程序和生活中找到一些让自己心灵美妙的东西.
 (By:Eastmount 2014-5-25 夜2点半 原创CSDNhttp://blog.csdn.net/eastmount/)

C语言API编写窗体界面和按钮相关推荐

  1. linux下的c语言实现象棋,用c语言+API制作象棋界面

    现在已经把所有的棋子放到上面了,运行即可看到象棋的开局画面,而且已经实现走子了.新手注意:注意不能直接复制代码,那样有行号,鼠标移动到代码上方就有复制按钮了. //本程序的目的是用c语言+API制作象 ...

  2. c语言图形界面设定,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  3. c语言界面怎么加图形,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  4. C语言如何编写游戏界面,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  5. C语言中图形方式界面怎么,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  6. 能用c语言编写图形界面吗,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  7. c语言可以编写图形界面吗,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  8. c语言 显示 图形界面,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

  9. c语言怎么让图形界面单独显示,「分享」C语言如何编写图形界面

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...

最新文章

  1. 进阶学习(3.4) Builder Pattern 建造者模式
  2. Python中关于‘self’的种种用法笔记
  3. 216. 组合总和 III017(回溯法求解)
  4. mysql timestamp 并发_MySQL 实现 EF Code First TimeStamp/RowVersion 并发控制
  5. 深度学习数据自动编码器_如何学习数据科学编码
  6. java 父子线程 调用链_ZipKin原理学习--Zipkin多线程及线程池中追踪一致性问题解决...
  7. 吴恩达机器学习(十二)主成分分析(降维、PCA)
  8. Effective Objective-C 2.0 Tips 总结 Chapter 3 Chapter 4
  9. iframe跨域与session失效问题
  10. linux 设备驱动之8250串口驱动分析
  11. 攻击者利用7号信令(SS7)中的漏洞从德国银行偷取钱财
  12. java WinRM 远程连接 windows10 执行脚本
  13. 安装智能陈桥五笔时请小心
  14. 中国眼部护理产品市场趋势报告、技术动态创新及市场预测
  15. 基于FPGA的数字电子琴——数电小系统设计【数字电子技术】(使用Vivado中的verilog语言)含piano代码文件(全)
  16. 2030年的人工智能与生活(AI and Life in 2030)
  17. 大教堂与集市读书笔记
  18. VPC5021电流模式 PWM 控制器 3uA 超低启动电流
  19. AXURE原型:AI翻译平台
  20. FPS游戏自动瞄准敌人头部?是如何实现的(三)准星算法与实现自动瞄准

热门文章

  1. ORACLE TEXT LEXER PREFERENCE(一)
  2. 从产品与程序员打架事件,谈谈需求管理的沟通能力
  3. thinkphp的使用——隐藏index.php
  4. socket.io c++库编译不成功的注意事项
  5. WebStorm For Mac下载及破解方法
  6. HTML CSS简介与图片映射
  7. HTML5 required是必填
  8. ASIHTTP 框架,同步、 异步请求、 上传 、 下载
  9. access 导入 txt sql语句_access将SQL语句从查询复制到VBA
  10. oracle带输出参数存储,oracle带输入输出参数存储过程(包括sql分页功能)