1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <Windows.h>
  6.  
  7. HINSTANCE g_hInstance=;
  8. HANDLE g_hOutput=;///接收标准输出句柄
  9. HWND g_hWndChild = ;//子窗口句柄
  10.  
  11. void OnCreate(HWND hWnd,LPARAM lParam)
  12. {
  13. CREATESTRUCT *cs = (CREATESTRUCT *)lParam;
  14. char *pText = (char *)cs->lpCreateParams;
  15. //MessageBox(NULL, pText, "info", MB_OK);
  16. //创建子窗口(子窗口的起始位置0,0是相对于父窗口而言的,并非指屏幕)
  17. g_hWndChild=CreateWindowEx(, "EDIT", "OK", WS_CHILD | WS_VISIBLE | WS_BORDER,
  18. , , cs->cx, cs->cy, hWnd, NULL, g_hInstance, NULL);
  19. }
  20.  
  21. void OnSize(HWND hWnd, LPARAM lParam)
  22. {
  23. int nWidth = LOWORD(lParam);
  24. int nHight = HIWORD(lParam);
  25. CHAR buf[] = { };
  26. sprintf(buf, "width=%d,hight=%d\n", nWidth, nHight);
  27. WriteConsole(g_hOutput, buf, strlen(buf),NULL,NULL);//输出到DOS窗口
  28. //排除窗口刚创建时的WM_SIZE消息
  29. if (NULL == g_hWndChild)
  30. return;
  31. //移动子窗口
  32. MoveWindow(g_hWndChild, , , nWidth, nHight, true);
  33. }
  34.  
  35. LRESULT WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
  36. {
  37. switch (uMsg)
  38. {
  39. case WM_SIZE:
  40. //窗口创建时会接收到WM_SIZE消息
  41. OnSize(hWnd,lParam);
  42. break;
  43. case WM_SYSCOMMAND:
  44. if (SC_CLOSE == wParam)
  45. {
  46. int nRet=MessageBox(NULL, "是否退出!", "info", MB_YESNO);
  47. if (nRet!=IDYES)
  48. {
  49. return ;
  50. }
  51. }
  52. break;
  53. case WM_CREATE://在窗口生成之前执行
  54. OnCreate(hWnd,lParam);
  55. break;
  56. case WM_DESTROY:
  57. PostQuitMessage();
  58. break;
  59. default:
  60. break;
  61. }
  62. return DefWindowProc(hWnd, uMsg, wParam, lParam);
  63. }
  64.  
  65. int Register(HINSTANCE hInstance,LPCTSTR lpClassName)
  66. {
  67. int ret = ;
  68. WNDCLASSEX wce = { };
  69. wce.cbSize = sizeof(wce);
  70. wce.style = CS_HREDRAW | CS_VREDRAW;
  71. wce.lpfnWndProc = (WNDPROC)WndProc;
  72. wce.cbClsExtra = ;
  73.  
  74. wce.cbWndExtra = ;
  75. wce.hInstance = hInstance;
  76. wce.hIcon = NULL;
  77. wce.hCursor = NULL;
  78.  
  79. wce.hbrBackground = (HBRUSH)(COLOR_WINDOW+);
  80. wce.lpszMenuName = NULL;
  81. wce.lpszClassName = lpClassName;
  82. wce.hIconSm = NULL;
  83. ATOM nAtom = RegisterClassEx(&wce);
  84. ret = nAtom == ? : ;
  85. return ret;
  86. }
  87.  
  88. void Display(HWND hWnd)
  89. {
  90. ShowWindow(hWnd, SW_SHOW);
  91. UpdateWindow(hWnd);
  92. }
  93.  
  94. void MyMessage()
  95. {
  96. MSG nMsg = { };
  97. while (GetMessage(&nMsg, NULL, , ))
  98. {
  99. TranslateMessage(&nMsg);
  100. DispatchMessage(&nMsg);
  101. }
  102. }
  103.  
  104. HWND CreateWnd(LPSTR lpClsssName, LPSTR lpWndName, HINSTANCE hInstance)
  105. {
  106. HWND hWnd = CreateWindowEx(, lpClsssName, lpWndName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT
  107. , , , NULL, NULL, hInstance,"HELL");
  108. return hWnd;
  109. }
  110.  
  111. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
  112. {
  113. AllocConsole();//打开DOS窗口
  114. g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出句柄
  115. g_hInstance = hInstance;
  116. if (!Register(hInstance, "Main"))
  117. {
  118. return -;
  119. }
  120. HWND hWnd=CreateWnd("Main", "hello", hInstance);
  121. Display(hWnd);
  122. MyMessage();
  123. return ;
  124. }

Windoows窗口程序六的更多相关文章

  1. Windoows窗口程序五

    程序执行机制 过程驱动-程序的执行过程是按照预订好的顺序执行. 事件驱动-程序的执行是无序,用户可以根据需要随机触发相应的事件. Win32窗口程序就是采用事件驱动方式执行,也就是消息机制. 当系统通 ...

  2. Windoows窗口程序一

    编写窗口程序的步骤: .定义WinMain入口函数 .定义窗口处理函数(处理消息)WindowProc .注册窗口类RegisterClass .创建窗口(在内存中创建窗口)CreateWindow ...

  3. Windoows窗口程序二

    WNDCLASS属性style取值: CS_GLOBALCLASS--应用程序全局窗口类 CS_BYTEALIGNCLIENT--窗口客户区的水平位置8倍数对齐 CS_BYTEALIGNWINDOW- ...

  4. Windoows窗口程序七

    WM_QUIT--用于结束消息循环处理 wParam - PostQuitMessage函数传递的参数 lParam - 不使用 当GetMessage收到这个消息后,会返回false,结束while ...

  5. Windoows窗口程序四

    子窗口的创建 .创建时要设置父窗口句柄 .创建风格要增加WS_CHILD|WS_VISIBLE HWND CreateChild(LPSTR lpClassName,LPSTR lpWndName,H ...

  6. Windoows窗口程序三

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h& ...

  7. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...

  8. Windows程序设计笔记(二) 关于编写简单窗口程序中的几点疑惑

    在编写窗口程序时主要是5个步骤,创建窗口类.注册窗口类.创建窗口.显示窗口.消息环的编写.对于这5个步骤为何要这样写,当初我不是太理解,学习到现在有些问题我基本上已经找到了答案,同时对于Windows ...

  9. 使用Qt生成第一个窗口程序

    一.打开QtCreater,点击New Project 二.在Qt中,最常用的窗口程序为widgets控件程序,这里我们选择Qt Widgets Application 三.Qt生成的debug和re ...

随机推荐

  1. win7 下jenkins配置与使用

    一.Jenkins的配置 1. 下载地址: Jenkins的官方网站:http://jenkins-ci.org/ 目前最新版本的Windows版:http://mirror.xmission.com ...

  2. Linux内存初始化(三) 内存布局

    一.前言 同样的,本文是内存初始化文章的一份补充文档,希望能够通过这样的一份文档,细致的展示在初始化阶段,Linux 4.4.6内核如何从device tree中提取信息,完成内存布局的任务.具体的c ...

  3. Unix环境高级编程(十二)线程控制

    本章介绍了一个进程中多个线程之间如何保持数据的似有性及进程的系统调用如何与线程进行交互. 1.线程限制: Single Unix定义了一线线程操作的限制,和其他的限制一样,可以通过sysconf来查询 ...

  4. (二)RocketMq入门之消息发送和接收

    一.消息产生.发送 public class Producer { public static void main(String[] args) throws MQClientException { ...

  5. 如何根据Ip获取地址信息--Java----待整理完善!!!

    如何根据Ip获取地址信息--Java----待整理完善!!! QQWry.dat数据写入方法: http://www.cnblogs.com/xumingxiang/archive/2013/02/1 ...

  6. 使用BeanUtils设置属性转换String到Date类型

    主要是用来设置非空对象的属性. 1 使用BeanUtils进行设置属性时,对于String,int可以自动转换.比如下面的例子 常用方法 1)BeanUtils.setProperty    //// ...

  7. PHP函数register_shutdown_function的使用示例

    某些情况下,我们需要在程序执行结束时,做一些后续的处理工作,这个时候,php的register_shutdown_function函数就可以帮我们来实现这个功能. 函数简介 当PHP程序执行完成后,自 ...

  8. 面向对象中private理解

    我们大家都知道思想訪问修饰符.public,protected,private,那么我们知道了继承中private私有属性能够继承吗?我么接下来做个小实验 class A {     private ...

  9. linux安装rzsz(lrzsz)

    lrzsz是一个unix通信套件提供的,X,Y和ZModem文件传输协议,可以用在Windows与linux系统之间的文件传输,体积小速度快,可以与xshell工具配合使用. (1)在线安装 yum ...

  10. [ci] jenkins的Timestamper插件-让日志显示时间

    jenkins的Timestamper插件-让jenkins console带时间戳 安装插件 配置pipline,使用timestamp - 官网有说怎么用: 即用timestamps{} 包裹所有 ...