设为首页 加入收藏

TOP

2.4 Windows应用程序举例(3)
2013-10-07 01:11:00 来源: 作者: 【 】 浏览:72
Tags:2.4 Windows 应用程序 举例

2.4 Windows应用程序举例(3)

【例2.2】在Win32应用程序中使用控件CreateControl(Ex2_02)。

控件是在系统内部定义的用于和用户交互的基本单元,它常用于对话框中。在Win32应用程序中,可在窗口基础上通过CreateWindow函数来创建一个控件窗口。

(1) 新建一个"An empty project"类型的Win32 Application(Win32应用程序)项目,项目的名称为"CreateControl"。

(2) 新建一个C++(www.cppentry.com)源文件(Source File)CreateControl.cpp,并输入如下代码:

  1. #include
  2. #include
  3. #include
  4. // 求一元二次方程的根,函数返回根的个数
  5. int GetRoot(float a, float b, float c, double *root)
  6. {
  7. double delta, deltasqrt;
  8. delta = b*b - 4.0 * a * c;
  9. if (delta<0.0) return 0; // 无根
  10. deltasqrt = sqrt(delta);
  11. if (a!=0.0) {
  12. root[0] = (-b + deltasqrt)/(2.0 * a);
  13. root[1] = (-b - deltasqrt)/(2.0 * a);
  14. } else
  15. if (b!=0.0) root[0] = root[1] = -c/b;
  16. else return 0;
  17. if (root[0] == root[1]) return 1;
  18. else return 2;
  19. }
  20. char str[80];
  21. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // 窗口过程
  22. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  23. LPSTR lpCmdLine, int nCmdShow)
  24. {
  25. HWND hwnd; // 窗口句柄
  26. MSG msg; // 消息
  27. WNDCLASS wndclass ; // 窗口类
  28. wndclass.style = CS_HREDRAW | CS_VREDRAW;
  29. wndclass.lpfnWndProc = WndProc;
  30. wndclass.cbClsExtra = 0;
  31. wndclass.cbWndExtra = 0;
  32. wndclass.hInstance = hInstance;
  33. wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
  34. wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
  35. wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
  36. wndclass.lpszMenuName = NULL;
  37. wndclass.lpszClassName = "Hello"; // 窗口类名
  38. if (!RegisterClass (&wndclass)) // 注册窗口
  39. {
  40. MessageBox (NULL, "窗口注册失败!", "HelloWin", 0);
  41. return 0;
  42. }
  43. // 创建窗口
  44. hwnd = CreateWindow ("Hello", // 窗口类名
  45. "Application窗口", // 窗口标题
  46. WS_OVERLAPPEDWINDOW, // 窗口样式
  47. CW_USEDEFAULT,
    // 窗口最初的 x 位置
  48. CW_USEDEFAULT,
    // 窗口最初的 y 位置
  49. CW_USEDEFAULT,
    // 窗口最初的 x 大小
  50. CW_USEDEFAULT,
    // 窗口最初的 y 大小
  51. NULL,
    // 父窗口句柄
  52. NULL,
    // 窗口菜单句柄
  53. hInstance,
    // 应用程序实例句柄
  54. NULL);
    // 创建窗口的参数
  55. ShowWindow(hwnd, nCmdShow); // 显示窗口
  56. UpdateWindow(hwnd); // 更新窗口,包括窗口的客户区
  57. while(GetMessage(&msg, NULL, 0, 0)) {
  58. TranslateMessage(&msg); // 转换某些键盘消息
  59. DispatchMessage(&msg); // 将消息发送给窗口过程,这里是WndProc
  60. }
  61. return msg.wParam;
  62. }
  63. LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam,
  64. LPARAM lParam)
  65. {
  66. HDC hdc;
  67. PAINTSTRUCT ps;
  68. static HWND hButton, hwndEdit[3];
  69. char strEdit[80];
  70. float a[3];
  71. double root[2];
  72. int i;
  73. switch (message) {
  74. case WM_CREATE: // 窗口创建产生的消息
  75. hwndEdit[0] = CreateWindow("edit",
  76. NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,
  77. 20, 70, 100, 25, hwnd, NULL, NULL, NULL);
  78. hwndEdit[1] = CreateWindow("edit", NULL,
  79. WS_CHILD|WS_VISIBLE|WS_BORDER,
  80. 130, 70, 100, 25, hwnd, NULL, NULL, NULL);
  81. hwndEdit[2] = CreateWindow("edit", NULL,
  82. WS_CHILD|WS_VISIBLE|WS_BORDER,
  83. 240, 70, 100, 25, hwnd, NULL, NULL, NULL);
  84. hButton = CreateWindow("button", "Calculate",
  85. WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
  86. 350, 70, 80, 25, hwnd, NULL, NULL, NULL);
  87. return 0 ;
  88. case WM_COMMAND: // 命令消息,控件产生的通知代码在wParam的高字中
  89. if (((HWND)lParam == hButton )&&( HIWORD(wParam) == BN_CLICKED))
  90. // 按下按钮
  91. {
  92. // 获取三个编辑框控件的内容,并将其转换成float数值
  93. for (i=0; i<3; i++) {
  94. GetWindowText(hwndEdit[i], strEdit, 80); // 获取编辑框内容
  95. a[i] = (float)atof(strEdit); // 将字符串转换成float数值
  96. }
  97. int n = GetRoot(a[0], a[1], a[2], root);
  98. if (n<1) strcpy(str, "方程无根!");
  99. else sprintf(str,"方程的解为:%f, %f", root[0], root[1]);
  100. MessageBox(NULL, str, "方程的根", 0);
  101. }
  102. case WM_PAINT:
  103. hdc = BeginPaint(hwnd, &ps);
  104. TextOut(hdc, 10, 10, "请输入一元二次方程的系数:", 25);
  105. TextOut(hdc, 10, 40, "a", 1);
  106. TextOut(hdc, 120, 40, "b", 1);
  107. TextOut(hdc, 230, 40, "c", 1);
  108. TextOut(hdc, 10, 90, str, strlen(str));
  109. EndPaint(hwnd, &ps);
  110. return 0;
  111. case WM_DESTROY: // 当窗口关闭时产生的消息
  112. PostQuitMessage(0);
  113. return 0;
  114. }
  115. // 执行默认的消息处理
  116. return DefWindowProc(hwnd, message, wParam, lParam);
  117. }

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.3.4 设备描述表 下一篇2.4 Windows应用程序举例(4)

评论

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