设为首页 加入收藏

TOP

C语言API编写窗体界面和按钮(一)
2015-01-22 21:30:40 来源: 作者: 【 】 浏览:120
Tags:语言 API 编写 窗体 界面 按钮
最近有个同学的程序需要用对话框的方式实现,但前面都是通过黑框形式完成的,老师突然让增加一个界面,本来准备采用MFC完成的,但后来一想,该程序核心东西是体现在它的算法上,控制台的程序并非不好.转念一想,如果使用MFC这样的方法好像需要再倒腾一遍,想到了大一在"C语言能干大事"中的东西,所以就准备采用这种形式直接完成,投机取巧的方法.
主要是通过调用Windows API界面的CreateWindows函数完成,同时也能创建按钮,把参数设置为button,如果想响应该按钮,只需在回调函数中增加消息WM_COMMAND判断即可.代码如下:
#include
  
   
#include
   
     //声明回调函数 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 ; //结构体后附加的字节数,一般总为0 wndclass.cbWndExtra = 0 ; //窗体实例附加的字节数,一般总为0 wndclass.hInstance = hInstance ; //模块句柄 wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; //图标句柄 任务栏显示的图标 wndclass.hCursor = LoadCursor (NULL, 
    IDC_ARROW) ; //光标句柄 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //背景颜色COLOR_BACKGROUND wndclass.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居中 //创建窗体API hwnd = CreateWindow(szAppName,TEXT("毕业设计"),WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,x,y,400,400,NULL,NULL,hInstance,NULL); //显示窗体的API 传入需要显示的窗体句柄和显示方式 ShowWindow(hwnd,iCmdShow); //刷新窗体的API UpdateWindow(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; //按钮1 hwndButton[0] = CreateWindow("BUTTON","训练", WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, 10,10,100,100,hwnd,NULL, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL); //按钮2 hwndButton[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
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言函数调用栈(一) 下一篇c语言编写经验逐步积累4

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: