#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h> HINSTANCE g_hInstance=;
HANDLE g_hOutput=;///接收标准输出句柄
HWND g_hWndChild = ;//子窗口句柄 void OnCreate(HWND hWnd,LPARAM lParam)
{
CREATESTRUCT *cs = (CREATESTRUCT *)lParam;
char *pText = (char *)cs->lpCreateParams;
//MessageBox(NULL, pText, "info", MB_OK);
//创建子窗口(子窗口的起始位置0,0是相对于父窗口而言的,并非指屏幕)
g_hWndChild=CreateWindowEx(, "EDIT", "OK", WS_CHILD | WS_VISIBLE | WS_BORDER,
, , cs->cx, cs->cy, hWnd, NULL, g_hInstance, NULL);
} void OnSize(HWND hWnd, LPARAM lParam)
{
int nWidth = LOWORD(lParam);
int nHight = HIWORD(lParam);
CHAR buf[] = { };
sprintf(buf, "width=%d,hight=%d\n", nWidth, nHight);
WriteConsole(g_hOutput, buf, strlen(buf),NULL,NULL);//输出到DOS窗口
//排除窗口刚创建时的WM_SIZE消息
if (NULL == g_hWndChild)
return;
//移动子窗口
MoveWindow(g_hWndChild, , , nWidth, nHight, true);
} LRESULT WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
{
case WM_SIZE:
//窗口创建时会接收到WM_SIZE消息
OnSize(hWnd,lParam);
break;
case WM_SYSCOMMAND:
if (SC_CLOSE == wParam)
{
int nRet=MessageBox(NULL, "是否退出!", "info", MB_YESNO);
if (nRet!=IDYES)
{
return ;
}
}
break;
case WM_CREATE://在窗口生成之前执行
OnCreate(hWnd,lParam);
break;
case WM_DESTROY:
PostQuitMessage();
break;
default:
break;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
} int Register(HINSTANCE hInstance,LPCTSTR lpClassName)
{
int ret = ;
WNDCLASSEX wce = { };
wce.cbSize = sizeof(wce);
wce.style = CS_HREDRAW | CS_VREDRAW;
wce.lpfnWndProc = (WNDPROC)WndProc;
wce.cbClsExtra = ; wce.cbWndExtra = ;
wce.hInstance = hInstance;
wce.hIcon = NULL;
wce.hCursor = NULL; wce.hbrBackground = (HBRUSH)(COLOR_WINDOW+);
wce.lpszMenuName = NULL;
wce.lpszClassName = lpClassName;
wce.hIconSm = NULL;
ATOM nAtom = RegisterClassEx(&wce);
ret = nAtom == ? : ;
return ret;
} void Display(HWND hWnd)
{
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
} void MyMessage()
{
MSG nMsg = { };
while (GetMessage(&nMsg, NULL, , ))
{
TranslateMessage(&nMsg);
DispatchMessage(&nMsg);
}
} HWND CreateWnd(LPSTR lpClsssName, LPSTR lpWndName, HINSTANCE hInstance)
{
HWND hWnd = CreateWindowEx(, lpClsssName, lpWndName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT
, , , NULL, NULL, hInstance,"HELL");
return hWnd;
} int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
AllocConsole();//打开DOS窗口
g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出句柄
g_hInstance = hInstance;
if (!Register(hInstance, "Main"))
{
return -;
}
HWND hWnd=CreateWnd("Main", "hello", hInstance);
Display(hWnd);
MyMessage();
return ;
}

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. WinForm窗体键盘事件,支持方向键和回车键

    /// <summary> /// 快捷键操作 /// </summary> protected override bool ProcessCmdKey(ref Message ...

  2. php 仿thinkphp的sql类库

    模仿thinkphp封装的类库 <?php /** * MySql操作类2015版 * 作者:咖啡兽兽 287962566@qq.com * 使用说明: * //包含文件 * inclode ' ...

  3. django post和get 比较

    当我们提交表单仅仅需要获取数据时就可以用GET: 而当我们提交表单时需要更改服务器数据的状态,或者说发送e-mail,或者其他不仅仅是获取并显示数据的时候就使用POST. 在这个搜索书籍的例子里,我们 ...

  4. ubuntu16安装配置nginx

    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev ...

  5. ERROR: JDWP Unable to get JNI 1.2 environment的错误解决方法

    在用java编程的时候,在debug模式下偶尔会出现下面的错误,jdk1.6.0-rc1: ERROR: JDWP Unable to get JNI 1.2 environment, jvm-> ...

  6. unity update与fixedUpdate

    update与渲染同步.fixedUpdate与物理同步. 在update中,speed要乘以Time.deltaTime.在fixedUpdate中,speed要乘以Time.fixedDeltaT ...

  7. windows live writer 2012 0x80070643

        折腾了两天,windows live writer 安装不成功,最后放弃了,发现一个叫做菊子曰的软件,但是免费版本的,发图片有限制,感觉非常不爽.windows live writer报错如下 ...

  8. Gcc\MingW\Cygwin\Msys简介

    一.GCC的历史GCC是一个原本用于Unix-like系统下编程的编译器.不过,现在GCC也有了许多Win32下的移植版本.所以,也许对于许多Windows开发者来说,GCC还是一个比较陌生的东西.所 ...

  9. git使用(二)----创建版本库

    创建版本库(操作都是在linux环境下) 什么是版本库呢?版本库又名仓库,英文名repository,其实就是一个目录,可以进行增删查改 创建一个目录,这里在根目录下创建一个git_home目录mkd ...

  10. Java高级面试题积累(二)

    简述23种设计 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口.而无需指定它们详细的类. 适配器模式(Adapter):将一个类的接口转换成客户希望的另外 ...