1. / testHtmlayout.cpp : 定义应用程序的入口点。
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "testHtmlayout.h"
  6. #include "include/htmlayout.h"
  7.  
  8. #pragma comment(lib,"lib/HTMLayout.lib")
  9.  
  10. #define MAX_LOADSTRING 100
  11.  
  12. // 全局变量:
  13. HINSTANCE hInst; // 当前实例
  14. TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本
  15. TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名
  16.  
  17. // 此代码模块中包含的函数的前向声明:
  18. ATOM MyRegisterClass(HINSTANCE hInstance);
  19. BOOL InitInstance(HINSTANCE, int);
  20. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  21. INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
  22.  
  23. int APIENTRY _tWinMain(HINSTANCE hInstance,
  24. HINSTANCE hPrevInstance,
  25. LPTSTR lpCmdLine,
  26. int nCmdShow)
  27. {
  28. UNREFERENCED_PARAMETER(hPrevInstance);
  29. UNREFERENCED_PARAMETER(lpCmdLine);
  30.  
  31. // TODO: 在此放置代码。
  32. MSG msg;
  33. HACCEL hAccelTable;
  34.  
  35. // 初始化全局字符串
  36. LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  37. LoadString(hInstance, IDC_TESTHTMLAYOUT, szWindowClass, MAX_LOADSTRING);
  38. MyRegisterClass(hInstance);
  39.  
  40. // 执行应用程序初始化:
  41. if (!InitInstance (hInstance, nCmdShow))
  42. {
  43. return FALSE;
  44. }
  45.  
  46. hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TESTHTMLAYOUT));
  47.  
  48. // 主消息循环:
  49. while (GetMessage(&msg, NULL, 0, 0))
  50. {
  51. if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  52. {
  53. TranslateMessage(&msg);
  54. DispatchMessage(&msg);
  55. }
  56. }
  57.  
  58. return (int) msg.wParam;
  59. }
  60.  
  61. //
  62. // 函数: MyRegisterClass()
  63. //
  64. // 目的: 注册窗口类。
  65. //
  66. // 注释:
  67. //
  68. // 仅当希望
  69. // 此代码与添加到 Windows 95 中的“RegisterClassEx”
  70. // 函数之前的 Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要,
  71. // 这样应用程序就可以获得关联的
  72. // “格式正确的”小图标。
  73. //
  74. ATOM MyRegisterClass(HINSTANCE hInstance)
  75. {
  76. WNDCLASSEX wcex;
  77.  
  78. wcex.cbSize = sizeof(WNDCLASSEX);
  79.  
  80. wcex.style = CS_HREDRAW | CS_VREDRAW;
  81. wcex.lpfnWndProc = WndProc;
  82. wcex.cbClsExtra = 0;
  83. wcex.cbWndExtra = 0;
  84. wcex.hInstance = hInstance;
  85. wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TESTHTMLAYOUT));
  86. wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
  87. wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
  88. wcex.lpszMenuName = MAKEINTRESOURCE(IDC_TESTHTMLAYOUT);
  89. wcex.lpszClassName = szWindowClass;
  90. wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  91.  
  92. return RegisterClassEx(&wcex);
  93. }
  94.  
  95. //
  96. // 函数: InitInstance(HINSTANCE, int)
  97. //
  98. // 目的: 保存实例句柄并创建主窗口
  99. //
  100. // 注释:
  101. //
  102. // 在此函数中,我们在全局变量中保存实例句柄并
  103. // 创建和显示主程序窗口。
  104. //
  105. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  106. {
  107. HWND hWnd;
  108.  
  109. hInst = hInstance; // 将实例句柄存储在全局变量中
  110.  
  111. hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
  112. CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
  113.  
  114. if (!hWnd)
  115. {
  116. return FALSE;
  117. }
  118.  
  119. ShowWindow(hWnd, nCmdShow);
  120. UpdateWindow(hWnd);
  121.  
  122. return TRUE;
  123. }
  124.  
  125. //
  126. // 函数: WndProc(HWND, UINT, WPARAM, LPARAM)
  127. //
  128. // 目的: 处理主窗口的消息。
  129. //
  130. // WM_COMMAND - 处理应用程序菜单
  131. // WM_PAINT - 绘制主窗口
  132. // WM_DESTROY - 发送退出消息并返回
  133. //
  134. //
  135. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  136. {
  137. int wmId, wmEvent;
  138. PAINTSTRUCT ps;
  139. HDC hdc;
  140. /*****************************************************/
  141. BOOL bHandle = NULL;
  142. HRESULT hr = HTMLayoutProcND(hWnd,message,wParam,lParam,&bHandle);
  143. if(bHandle)return hr;
  144. switch (message)
  145. {
  146. case WM_COMMAND:
  147. wmId = LOWORD(wParam);
  148. wmEvent = HIWORD(wParam);
  149. // 分析菜单选择:
  150. switch (wmId)
  151. {
  152. case IDM_ABOUT:
  153. DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
  154. break;
  155. case IDM_EXIT:
  156. DestroyWindow(hWnd);
  157. break;
  158. default:
  159. return DefWindowProc(hWnd, message, wParam, lParam);
  160. }
  161. break;
  162. case WM_PAINT:
  163. hdc = BeginPaint(hWnd, &ps);
  164. // TODO: 在此添加任意绘图代码...
  165. EndPaint(hWnd, &ps);
  166. break;
  167. case WM_DESTROY:
  168. PostQuitMessage(0);
  169. break;
  170. case WM_CREATE:
  171. /*****************************************************/
  172. HTMLayoutLoadFile(hWnd,L"windows/MainWindow.html");
  173. break;
  174. default:
  175. return DefWindowProc(hWnd, message, wParam, lParam);
  176. }
  177. return 0;
  178. }
  179.  
  180. // “关于”框的消息处理程序。
  181. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  182. {
  183. UNREFERENCED_PARAMETER(lParam);
  184. switch (message)
  185. {
  186. case WM_INITDIALOG:
  187. return (INT_PTR)TRUE;
  188.  
  189. case WM_COMMAND:
  190. if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  191. {
  192. EndDialog(hDlg, LOWORD(wParam));
  193. return (INT_PTR)TRUE;
  194. }
  195. break;
  196. }
  197. return (INT_PTR)FALSE;
  198. }

文件结构式图片不好上传我就不上了,,路径都是相对路径,个人根据自己的实际情况添加吧 “."代表本文件所在大文件夹,可以不用直接subdirectory 就可以。“..” 代表本文件的上一级目录。

学习htmlayout 最简单的实践 ,让自己的网页在 框架中加载。最初的我无法实现,看过许多以后才可以,因此挺高兴的。 后续会添加 消息处理。

html代码:

  1. <html>
  2. <meta />
  3. <head>
  4. <style>
  5. div >*
  6. {
  7. margin:10px;
  8. }
  9.  
  10. </style>
  11. </head>
  12.  
  13. <body>
  14. <div #title align="center">
  15. <h1> Hello world!</h1>
  16. </div>
  17. <div>
  18. <button #myFirstButton> testbutton </button>
  19. <widget type="select-dropdown">
  20.  
  21. <option>choice1</option>
  22. <option>choice2</option>
  23. <option>choice3</option>
  24. <option>choice4</option>
  25.  
  26. </widget>
  27. <widget type="text-area" style="border:solid 1px black">
  28. this is a test;
  29.  
  30. </widget>
  31. <widget type="tree">
  32. <option>choice1</option>
  33. <option>choice2</option>
  34. <option>choice3</option>
  35. <option>choice4</option>
  36. </widget>
  37.  
  38. </div>
  39.  
  40. </body>
  41. </html>

  

htmlayout 最简单的实践,用于理解实现原理。的更多相关文章

  1. 深入理解FFM原理与实践

    原文:http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html 深入理解FFM原理与实践 del2 ...

  2. 深入理解 ProtoBuf 原理与工程实践(概述)

    ProtoBuf 作为一种跨平台.语言无关.可扩展的序列化结构数据的方法,已广泛应用于网络数据交换及存储.随着互联网的发展,系统的异构性会愈发突出,跨语言的需求会愈加明显,同时 gRPC 也大有取代R ...

  3. 实践与理解CMM体系

    我的项目管理之路--5.实践与理解CMM体系   分类: 管理专辑(65) 过程改进(9) 软件工程(52) 版权声明:本文为博主原创文章,未经博主允许不得转载. 一个现代企业我们可以把它比作为自然界 ...

  4. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  5. 用一个简单的例子来理解python高阶函数

    ============================ 用一个简单的例子来理解python高阶函数 ============================ 最近在用mailx发送邮件, 写法大致如 ...

  6. 流水车间调度算法分析的简单+Leapms实践--混合整数规划的启发式建模

    流水车间调度算法分析的简单+Leapms实践--混合整数规划的启发式建模 清华大学出版社出版的白丹宇教授著作<流水车间与开放车间调度算法渐近分析>采用渐近分析方法分析多个NP-难类启发调度 ...

  7. thinkphp中view页面中的volist标签转化为原生php分析(多去看源代码,你会发现不仅简单,方便你理解,还节约时间)

    thinkphp中view页面中的volist标签转化为原生php分析(多去看源代码,你会发现不仅简单,方便你理解,还节约时间) 一.总结 1.标签和原生php之间的关系:标签只是为了方便你使用,标签 ...

  8. 《深入理解mybatis原理》 Mybatis初始化机制具体解释

    对于不论什么框架而言.在使用前都要进行一系列的初始化,MyBatis也不例外. 本章将通过下面几点具体介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XM ...

  9. kafka原理和实践(一)原理:10分钟入门

    系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...

随机推荐

  1. linux下编译C/C++ 程序

    C/C++的速度是Python和perl所无法比拟的,尤其对于处理超大的生物信息学文件来说. 最近在写一个最简单的fastq cut工具,Python简直慢到不能忍,8G的fastq.gz文件的cut ...

  2. 详细讲解Linux下安装python3(Python3.5.4)

    https://jingyan.baidu.com/article/6b97984dd6dbb01ca2b0bf0a.html

  3. Postman发包form-data、x-www-form-urlencoded、raw、binary的区别

    首先普及下http的Post四种Content-Type Postman中post编码方式form-data.x-www-form-urlencoded.raw.binary的区别 x-www-for ...

  4. 网络基础之socket

    socket 我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程.能够唯一标示网络中的进程后,它 ...

  5. Leetcode 869. 重新排序得到 2 的幂

    869. 重新排序得到 2 的幂  显示英文描述 我的提交返回竞赛   用户通过次数102 用户尝试次数134 通过次数103 提交次数296 题目难度Medium 从正整数 N 开始,我们按任何顺序 ...

  6. 主流Linux发行版简介

    发行版 包格式 所属厂商 发布年份 最新版本 说明 RHEL RPM RedHat 2004 7.3 RedHat Linux9.0后的企业方向,系统可以免费下载安装但无法使用官方yum源 Fedor ...

  7. spring自定义xml标签&自定义注解

    public class YafBeanDefinitionParser implements BeanDefinitionParser { private BeanDefinitionRegistr ...

  8. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十一):集成 Shiro 框架

    Apache Shiro 优势特点 它是一个功能强大.灵活的,优秀开源的安全框架. 它可以处理身份验证.授权.企业会话管理和加密. 它易于使用和理解,相比Spring Security入门门槛低. 主 ...

  9. oracle中如何创建表的自增ID(通过序列)

    1.什么是序列呢? 序列是一数据库对象,利用它可生成唯一的整数.一般使用序列自动地生成主码值.一个序列的值是由特别的Oracle程序自动生成,因而序列避免了在运用层实现序列而引起的性能瓶颈. Orac ...

  10. matlab server mapreduce

    >> Z = server.rpc('zeros', 2, 3);>> Z = [2x3 double] [2x3 double] >> Z{1}ans = 0 0 ...