随笔 - 2146  文章 - 19 评论 - 11846 阅读 - 1267万

随笔分类 -  Windows 底层编程

1 2 下一页
内存管理[6]
摘要:本例效果图: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2:... 阅读全文
posted @ 2008-05-13 16:57 万一 阅读(6536) 评论(15) 推荐(1) 编辑
内存管理[5]
摘要:本例在建立一个新的堆前后分别通过 GetProcessHeaps 函数获取了当前进程的堆句柄列表, 没想到一个最简单的程序也有 5 个堆. 效果图: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtr... 阅读全文
posted @ 2008-05-09 19:12 万一 阅读(5747) 评论(15) 推荐(2) 编辑
内存管理[4]
摘要:一个使用私有堆的例子: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; proc... 阅读全文
posted @ 2008-05-09 15:22 万一 阅读(6575) 评论(19) 推荐(1) 编辑
内存管理[3]
摘要:VirtualAlloc 分配的内存是以 4K 为最小单位、连续的内存地址(但映射到真实的内存时它不一定是连续的), 前面说了, 它不适合分配小内存(譬如只有几个字节的变量); 局部的变量在 "栈" 中有程序自动管理, 那么那些全局的小变量怎么办呢? 这就要用到 "堆". 这样看来, VirtualAlloc 分配的内存既不是 "栈" 也不是 "堆"; VirtualAlloc 分配的内存地址是... 阅读全文
posted @ 2008-05-08 17:22 万一 阅读(7768) 评论(7) 推荐(1) 编辑
内存管理[2]
摘要:系统给程序的地址数是 4G, 为什么不是 3G 或 5G? 因为 32 位的指针的最大值就是 $FFFFFFFF, 它不能表示更多了, 究其根源这要回到 CPU 的寻址能力、地址总线等等.在 Win64 下, 系统给程序的地址数达到了 16EB(0 - $FFFFFFFFFFFFFFFF), 也就是 18446744073709551616 个. 不过 Win64 还没有普及, 我们还得回到实际的... 阅读全文
posted @ 2008-05-06 15:11 万一 阅读(8675) 评论(12) 推荐(0) 编辑
内存管理[1]
摘要:Windows 是多任务的操作系统, 一个任务就是一个应用(应用程序)、一个应用占一个进程; 在一个进程里面, 又可以运行多个线程(所以就有了很多"多线程编程"的话题).对 Win32 来讲, 系统给每个进程 4GB 的地址空间:低端 2GB($00000000 - $7FFFFFFF) 给用户支配;高端 2GB($80000000 - $FFFFFFFF) 留给系统使用.文件或程序要调入内存才能... 阅读全文
posted @ 2008-05-06 12:00 万一 阅读(12997) 评论(14) 推荐(2) 编辑
开始学习内存管理
摘要:这是可能需要的函数: System.AllocMem; System.AllocMemCount; System.AllocMemSize; System.Dispose; System.Finalize; System.FreeMem; System.FreeMemory; System.GetHeapStatus; System.GetMem; System.GetMemory; Syste... 阅读全文
posted @ 2008-05-04 13:06 万一 阅读(10753) 评论(0) 推荐(0) 编辑
Windows 编程[23] - 快捷键资源
摘要:提示: 1、因为加入快捷键, 本例的基础代码和以前不同了; 因为窗体初始化时要先载入快捷键资源, 还要拦截快捷键消息另作处理. 2、关于快捷键的话题, 以前接触过不少了, 但那些都不是本质: 注册系统级热键 所有可选的快捷键列表 快捷键设置控件 快捷键的记录方式 3、我曾经以为快捷键不过就是拦截键盘消息, 现在看来那是想得太简单了; 很容易就可以说明: 键盘消息是... 阅读全文
posted @ 2008-04-24 22:34 万一 阅读(5643) 评论(5) 推荐(0) 编辑
Windows 编程[22] - 菜单选择与画刷修改
摘要:提示: 1、CheckMenuItem 函数用来改变菜单项的选择状态; 2、SetClassLong 函数可以修改窗口类注册前登记的所有参数, 这里通过 GCL_HBRBACKGROUND 参数指示要修改画刷; 3、用 CreateSolidBrush 函数根据常量数组中的颜色建立实心画刷; 4、InvalidateRect 用来是客户区无效, 从而导致重绘, 它的第二个参数为 nil 表示要操作... 阅读全文
posted @ 2008-04-24 16:35 万一 阅读(2802) 评论(0) 推荐(0) 编辑
Windows 编程[21] - WM_MENUSELECT 消息与 GetMenuString 函数
摘要:提示: 1、菜单项的标识存放在 WM_MENUSELECT 消息的 lParam 参数中的低两位. 2、WM_MENUSELECT 也包括系统菜单发送的消息. 3、因为顶层菜单(File Edit Help)一般在资源文件中设同样的标识符(譬如: 65535), 所以系统会把它们的位置(或者叫顺序)当作标识; 因此执行 GetMenuString 时, 需要使用用非默认(非0)的 MF_BYPO... 阅读全文
posted @ 2008-04-23 17:58 万一 阅读(4419) 评论(4) 推荐(0) 编辑
Windows 编程[20] - 改变菜单项并换行
摘要:本例效果图: 本例使用的资源文件(TestRes.rc): MyMenu1 MENUEX BEGIN MENUITEM "File" ,101 MENUITEM "Add" ,102 END 本例代码文件: program Project1; {$R 'TestRes.res' 'TestRes.rc'} uses Windows, Messages; var ... 阅读全文
posted @ 2008-04-23 02:46 万一 阅读(2173) 评论(3) 推荐(0) 编辑
Windows 编程[19] - 改变菜单项的状态: GetMenuState、EnableMenuItem
摘要:本例效果图: 本例使用的资源文件(TestRes.rc): MyMenu1 MENUEX BEGIN MENUITEM "菜单" ,101 MENUITEM "改变我的禁止与非禁止状态" ,102 MENUITEM "改变" ,103 END 本例代码文件: program Project1; {$R... 阅读全文
posted @ 2008-04-23 02:13 万一 阅读(4583) 评论(8) 推荐(0) 编辑
Windows 编程[18] - 更换菜单项: ModifyMenu
摘要:本例效果图: 本例使用的资源文件(TestRes.rc): MyMenu1 MENUEX BEGIN MENUITEM "Open" ,101 MENUITEM "Old" ,102 MENUITEM "Help" ,103 END 本例代码文件: program Project1; {$R 'TestRes.res' 'TestRes.rc'} uses ... 阅读全文
posted @ 2008-04-22 23:24 万一 阅读(3036) 评论(2) 推荐(0) 编辑
Windows 编程[17] - 更换菜单: LoadMenu、DestroyMenu、SetMenu
摘要:本例效果图: 本例在资源文件中备有两组菜单, 程序实现运行时切换. 本例使用的资源文件(TestRes.rc): MyMenu1 MENUEX BEGIN MENUITEM "Open" ,101 MENUITEM "Edit" ,102 MENUITEM "Help" ,103 MENUITEM "Chinese" ,104 ,MFT_RIGHTJUST... 阅读全文
posted @ 2008-04-22 22:48 万一 阅读(3695) 评论(3) 推荐(0) 编辑
Windows 编程[16] - 添加与删除菜单项:GetMenu、AppendMenu、DeleteMenu、DrawMenuBar
摘要:本例效果图: 本例在窗体建立时, 动态添加了三个菜单; 并赋予它们自我删除的功能. 本例使用的资源文件(TestRes.rc): MyMenu1 MENUEX BEGIN POPUP "&File" BEGIN MENUITEM "E&xit" ,101 END END 本例代码文件: program Project1; {$R 'TestRes.res' '... 阅读全文
posted @ 2008-04-22 22:02 万一 阅读(6066) 评论(1) 推荐(0) 编辑
Windows 编程[15] - 菜单消息: WM_COMMAND
摘要:本例效果图: 点击任一个菜单项, 都会发出一个 WM_COMMAND 消息, 消息的 wParam 参数的低两位就是标识菜单项的那个整数! 本例使用的资源文件(TestRes.rc): #define IDM_New 101 #define IDM_Open 102 #define IDM_Save 103 #define IDM_Exit 104 #define IDM_Cut... 阅读全文
posted @ 2008-04-22 13:24 万一 阅读(4783) 评论(0) 推荐(0) 编辑
Windows 编程[14] - 菜单与菜单资源(三)
摘要:前面我们分别使用过 MENU 和 MENUEX 来指定菜单资源, 我发现用 MENU 不必注意大小写; 但 MENUEX 在使用参数时需要注意大小写! 另外, 指定相同的功能时, 它们使用的参数和格式也有很大的区别. 我想还是多了解 MENUEX 吧, 因为它的参数同时也是 Win32API 菜单函数们 需要的! MENUEX 有四个参数, 分别是: 菜单文本, 菜单标识(整数), 菜单格式(常... 阅读全文
posted @ 2008-04-22 11:55 万一 阅读(3374) 评论(2) 推荐(0) 编辑
Windows 编程[13] - 菜单与菜单资源(二)
摘要:我们可以把上例中的资源文件修改成这样: MyMenu1 MENUEX BEGIN POPUP "&File" ,65535 BEGIN MENUITEM "&New" ,101 MENUITEM "&Open" ,102 MENUITEM "&Save" ,103 MENUITEM SEPARATOR MENUITEM ... 阅读全文
posted @ 2008-04-21 21:27 万一 阅读(3656) 评论(3) 推荐(0) 编辑
Windows 编程[12] - 菜单与菜单资源(一)
摘要:假如我们用 TMainMenu 控件设计如下菜单: 该菜单在窗体源文件中是这样存储的: object MainMenu1: TMainMenu Left = 160 Top = 104 object File1: TMenuItem Caption = '&File' object New1: TMenuItem Caption = '&New' end objec... 阅读全文
posted @ 2008-04-20 12:17 万一 阅读(4198) 评论(1) 推荐(0) 编辑
Windows 编程[11] - WM_SIZE 消息
摘要:本例效果图: program Project1; uses Windows, Messages; {供 WM_SIZE 消息调用的自定义过程} procedure OnSize(h: HWND); var Rect: TRect; pt: TPoint; buf: array[0..255] of Char; begin GetWindowRect(h, Rect); ... 阅读全文
posted @ 2008-04-19 15:54 万一 阅读(4671) 评论(29) 推荐(0) 编辑

1 2 下一页


点击右上角即可分享
微信分享提示