#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. OGG_GoldenGate目标端库级别数据初始化(案例)

    2014-03-07 Created By BaoXinjian

  2. OkHttp拦截器的实现原理

    今天项目中遇到需要将从push接收到的数据按照协议parse成应用层需要的结构化数据类型问题:因为push消息类型繁多,等待解析出的结构化数据类型也多样,有的还需要经过几步的parse过程:而且因为项 ...

  3. Android性能优化之被忽视的Memory Leaks

    起因 写博客就像讲故事.得有起因,经过,结果,人物.地点和时间.今天就容我给大家讲一个故事. 人物呢.肯定是我了. 故事则发生在近期的这两天,地点在coder君上班的公司.那天无意中我发现了一个奇怪的 ...

  4. 【驱动笔记9】初探IRP

    文章作者:grayfox作者主页:http://nokyo.blogbus.com原始出处:http://www.blogbus.com/nokyo-logs/34005738.html 此前我们可能 ...

  5. Python 字典 popitem() 方法

    描述 Python 字典 popitem() 方法随机返回并删除字典中的一个键/值对(一般删除末尾对). 如果字典已经为空,却调用了此方法,就报出KeyError异常. 语法 popitem() 方法 ...

  6. STM32 GPIO口模式配置

    F103系列 typedef struct { uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured. This pa ...

  7. jenkins 构建执行jmeter测试流程

    性能测试使用maven工程说明1.依赖尽量用maven依赖管理2.添加jmeter maven依赖 <dependency> <groupId>org.apache.jmete ...

  8. unity, mesh Collider

    关闭mesh Renderer以便查看mesh Collider "For Unity 5, we must also select "Convex" on the Me ...

  9. [Jobdu] 题目1545:奇怪的连通图

    题目描述: 已知一个无向带权图,求最小整数k.使仅使用权值小于等于k的边,节点1可以与节点n连通. 输入: 输入包含多组测试用例,每组测试用例的开头为一个整数n(1 <= n <= 100 ...

  10. paip.索引的种类以及实现attilax 总结

    paip.索引的种类以及实现attilax 总结 1. 索引的类型 1 2. Btree索引(分块索引) 1 3. Hash 索引(编号索引) 1 4. 倒排索引 2 5. 对大型文本文件做索引 2 ...