program Project1;usesWindows, Messages;{回调函数; 其中要处理的消息很多, 最好用 case 语句}
function WndProc(wnd: HWND; msg: UINT; wParam: Integer; lParam: Integer): Integer; stdcall;
beginResult := 0;case msg ofWM_DESTROY: PostQuitMessage(0); {收到 WM_DESTROY 后, 发送 WM_QUIT 消息指示退出}else{其他消息交 DefWindowProc 处理; DefWindowProc 会返回回调函数需要的返回值}Result := DefWindowProc(wnd, msg, wParam, lParam);end;
end;{登记与注册窗口类的函数}
function RegMyWndClass: Boolean;
varMyWndClass: TWndClass;
begin{指定窗口类型}MyWndClass.style         := CS_HREDRAW or CS_VREDRAW;  {改变大小时重绘}MyWndClass.lpfnWndProc   := @WndProc;                  {回调函数指针}MyWndClass.cbClsExtra    := 0;                         {没有额外的窗口类信息}MyWndClass.cbWndExtra    := 0;                         {没有额外的窗口信息}MyWndClass.hInstance     := HInstance;                 {程序实例句柄}MyWndClass.hIcon         := 0;                         {没指定图标}MyWndClass.hCursor       := LoadCursor(0, IDC_ARROW);  {选用了系统提供的指针}MyWndClass.hbrBackground := HBRUSH(COLOR_BTNFACE + 1); {背景色使用 Windows 默认的按钮颜色}MyWndClass.lpszMenuName  := nil;                       {不指定默认菜单}MyWndClass.lpszClassName := 'MyWindowClass';           {给窗口类型命名}Result := RegisterClass(MyWndClass) <> 0;              {注册窗口类型}
end;{主程序}
varhWnd: THandle;Msg : TMsg;
begin{调用登记与注册窗口的函数}if not RegMyWndClass thenbeginMessageBox(0, '窗口类注册失败!', '提示', MB_OK + MB_ICONERROR);Exit;end;{建立窗口并返回句柄; 既然有 CreateWindowEx 就不使用 CreateWindow 了}hWnd := CreateWindowEx(0,                      {不使用扩展风格}'MyWindowClass',        {窗口类型名}'新窗口',               {标题}WS_OVERLAPPEDWINDOW,    {窗口的常规样式}Integer(CW_USEDEFAULT), {默认水平位置}Integer(CW_USEDEFAULT), {默认垂直位置}Integer(CW_USEDEFAULT), {默认宽度}Integer(CW_USEDEFAULT), {默认高度}0,                      {无父窗口}0,                      {无主菜单}HInstance,              {实例句柄}nil                     {无附加信息});if hWnd = 0 then {如果窗口建立失败}beginMessageBox(0, '窗口建立失败!', '提示', MB_OK + MB_ICONERROR);Exit;end;{显示窗口与更新窗口}ShowWindow(hWnd, SW_SHOWNORMAL);UpdateWindow(hWnd);{消息循环; GetMessage 在收到 WM_QUIT 消息时会返回 False, 从而终止循环}while(GetMessage(Msg, 0, 0, 0)) dobeginTranslateMessage(Msg); {需要对部分键盘消息的再处理}DispatchMessage(Msg);  {将消息发送给回调函数}end;Halt(Msg.wParam); {没有了消息循环程序自然会退出; 加上这句, 程序会根据退出码主动退出}
end.

Windows 编程[6] - 学习窗体生成的过程六: 最终的代码!相关推荐

  1. Windows 编程[3] - 学习窗体生成的过程三

    为什么80%的码农都做不了架构师?>>>    根据前面的理论, 一个窗口生成的框架应该是这个样子: program Project1;uses Windows; {前面提到的函数都 ...

  2. Windows 编程[5] - 学习窗体生成的过程五

    根据前面的介绍, 可以完成一个窗口的建立了: program Project1;usesWindows, Messages;{窗口回调函数, 必须声明在使用它的程序前面} function WndPr ...

  3. Windows编程课程学习笔记

    一. Windows程序内部运行机制--Windows编程课程学习笔记 二. MFC框架程序分析--Windows编程课程学习笔记 三. 简单绘图--Windows编程课程学习笔记 四. 文本编程-- ...

  4. delphi windows编程_学习C/C++:伴随我成长的编程书!

    学习C++是一个艰难的过程.如果从我第一次看C++的书算起,现在已经过了11年了.一开始的动机也是很不靠谱的.刚开始我很喜欢用VB6来开发游戏,但是我能找到的资料都是用C++来做例子的,文字部分又不丰 ...

  5. 七. 界面编程--Windows编程课程学习笔记

    7.1更改窗口大小.标题.风格 7.1.1 在窗口创建之前更改 如果希望在应用程序窗口创建之前修改它的大小.标题和风格,应该在CMainFrame类的PreCreateWindow成员函数进行.该函数 ...

  6. 六. 对话框编程--Windows编程课程学习笔记

    6.1 对话框基本知识 对话框是一个窗口,与对话框资源相关的类为CDialog,由CWnd类派生而来.可以将对话框看成是一个大容器,在它上面能够放置各种标准和扩展控件,是用户与程序进行交互的重要手段. ...

  7. Windows编程-- 用户方式中线程的同步---关键代码段(临界区)

    可以从例子学习,更好的掌握 #include <windows.h> #include <iostream.h> //两个线程的声明 DWORD WINAPI Fun1Proc ...

  8. C/C++ 编程推荐学习顺序和书籍

    自学或者学习C/C++编程不知道怎么办?那么恭喜你看到本文,本文将会为你提供C/C++编程的学习书籍顺序推荐,希望对大家有帮助! C/C++语言基础入门书籍: <C Primer Plus> ...

  9. 少儿编程Scratch学习教程2--官方初学指南

    下载完软件,可以看一下官方的初学指南.学习下基本的操作. Scratch主要由角色和背景两部分构成.其中角色和背景都是由脚本,造型和声音组成的. 打开软件就可以看见下面的界面了. 在红色的脚本区域,是 ...

  10. 少儿编程Scratch学习教程--Scratch介绍及参赛相关

    之前写了几篇关于Scratch的使用文章.忽然想起,忘记介绍下Scratch了. Scratch是一款由麻省理工学院(MIT) 设计开发的少儿编程工具.官方网址是麻省理工学院网站的一个分支.这个软件的 ...

最新文章

  1. lovely desktop
  2. 【PAT乙级】1028 人口普查 (20 分)
  3. javascript --- 尾递归优化的实现
  4. Android 最新左右可见上下页的banner实现demo
  5. [记录] --- linux上项目
  6. 程序员加班一周休病假,犯了小错误遭开除,老板怒斥程序员不中用
  7. 源码完全注释:socket select
  8. Continuous Laplacian, Functional Map, Spectral CNN
  9. win10清理c盘_别再用什么管家!打开这个功能,Win10自动给你清垃圾
  10. [JLOI 2016]成绩比较
  11. javascript跑马灯效果
  12. RRT算法三维避障的MATLAB实现
  13. 雷电模拟器Android obb,exagear模拟器数据obb包
  14. 瑞斯康达raisecom交换机基础配置
  15. oracle报1405,【案例】Oracle报错ORA-15054 asm diskgroup无法mount的解决办法
  16. 面试系列一:精选大数据面试真题10道(混合型)-附答案详细解析
  17. 让复选框实现单选功能
  18. Linux中Web项目部署以及基本指令
  19. java基础之重写父类_繁星漫天_新浪博客
  20. Markdown的语法使用

热门文章

  1. RStudio的下载与安装
  2. function传值传字符串,然后Ajax url传值的时候传这个装字符串的变量
  3. BZOJ 1066 蜥蜴 最大流
  4. 金蝶K3 WISE BOM多级展开_销售成本表
  5. struts2+spring的两种整合方式
  6. 8大排序算法图文解说
  7. [2077]迷障 sdutOJ
  8. LINQ Enumerable 续 II
  9. 《APUE》读书笔记—第四章文件和目录
  10. Google Earth 6 Beta版发布 (供下载地址)