今天去面试,面试官放了句很牛的话,“去CSDN问吧,没人能说清楚设备句柄(HDC)是什么”
我当场被这个问题问傻掉了
我说我经常来这里,他就说了 去CSDN问吧,没人能说清楚设备句柄(HDC)是什么
不管怎么样 我想来问问 顺便也张长知识
问题点数:0、回复次数:58Top
1 楼cici2006(以不变应万变)回复于 2005-12-08 16:22:12 得分 0
座先Top
2 楼jyg8888(鸟哥)回复于 2005-12-08 16:25:47 得分 0
哎 请高手指点迷津呀
Top
3 楼milkzhang()回复于 2005-12-08 16:32:07 得分 0
跟问一个不会煮饭的人怎么煮饭一样的道理Top
4 楼firmbird(firmbird)回复于 2005-12-08 16:32:40 得分 0
拐翻,“1”是什么,全世界没有人能说清楚。Top
5 楼jyg8888(鸟哥)回复于 2005-12-08 16:55:44 得分 0
(HDC)设备句柄
请参考SDK知识
Top
6 楼jyg8888(鸟哥)回复于 2005-12-08 16:57:08 得分 0
switch (uMsg)
{
case WM_PAINT:
// hdc = BeginPaint (hwnd, &ps) ;
// GetClientRect (hwnd, &rect) ;
// DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
// EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
==========================================
Top
7 楼jyg8888(鸟哥)回复于 2005-12-08 17:01:29 得分 0
读者可能还记得,句柄只不过是一个数值,Windows以它在内部使用对象。程序写作者从Windows取得句柄,然后在其它函数中使用该句柄。设备内容句柄是GDI函数的窗口「通行证」,有了这种设备内容句柄,程序写作者就能自如地在显示区域上绘图,使图形如自己所愿地变得好看或者难看。
设备内容(简称为「DC」)实际上是GDI内部保存的数据结构。设备内容与特定的显示设备(如视讯显示器或打印机)相关。对于视讯显示器,设备内容总是与显示器上的特定窗口相关。
设备内容中的有些值是图形「属性」,这些属性定义了GDI绘图函数工作的细节。例如,对于TextOut,设备内容的属性确定了文字的颜色、文字的背景色、x坐标和y坐标映像到窗口的显示区域的方式,以及显示文字时Windows使用的字体。
当程序需要绘图时,它必须先取得设备内容句柄。在取得了该句柄后,Windows用内定的属性值填入内部设备内容结构。在后面的章节中您会看到,可以通过呼叫不同的GDI函数改变这些默认值。利用其它的GDI函数可以取得这些属性的目前值。当然,还有其它的GDI函数能够在窗口的显示区域真正地绘图。
当程序在显示区域绘图完毕后,它必须释放设备内容句柄。句柄被程序释放后就不再有效,且不能再被使用。程序必须在处理单个消息处理期间取得和释放句柄。除了呼叫CreateDC(函数,在本章暂不讲述)建立的设备内容之外,程序不能在两个消息之间保存其它设备内容句柄。
Windows应用程序一般使用两种方法来取得设备内容句柄,以备在屏幕上绘图。
======================摘自WINDOWS程序设计=================
问题是我看的不太理解
能通俗的概括一下吗
Top
8 楼mqmelon(晓风)回复于 2005-12-08 17:28:08 得分 0
我的理解:设备是一种资源,为了能使用为每种设备为其分配了一个标识,即设备句柄,就象指针指向一个结构或类一样,这样也能方便实现设备无关性。Top
9 楼fhqiplj(霏霏鱼)回复于 2005-12-08 17:38:15 得分 0
可以认为是一个内核资源,句柄就是这个资源的一个"指针",让你可以方便的调用Top
10 楼kenskens(☆☆☆☆☆☆)回复于 2005-12-08 18:01:38 得分 0
想研究OS源码很久了,这位考官的话更坚定了偶的决心,Windows下好多东西都只能人云亦云,似是而非,矇矇胧胧。。。
感觉跟着MS走,就只能像人家说的那样吃青春饭,可是不跟着它走,搞不好连青春饭都没得吃。。。 反正偶是不打算再跟MS屁股后面追了
梁肇新先生说。Net和Java就像别人挖好的一座金碧辉煌的大坑,引诱程序员往里跳......Top
11 楼Featured(我握着爱情的门票静静排队……)回复于 2005-12-08 18:30:39 得分 0
马甲?Top
12 楼lxb365(to be loved)回复于 2005-12-08 19:47:36 得分 0
我也想知道Top
13 楼hell_wolf(浪花)回复于 2005-12-08 20:16:52 得分 0
upTop
14 楼hell_wolf(浪花)回复于 2005-12-08 20:18:46 得分 0
哪个公司的牛人这么瞧不起csdn上的人Top
15 楼Pigwen(Pigwen)回复于 2005-12-08 20:45:09 得分 0
为什么要说清楚?Top
16 楼wxshzf(oldriver)回复于 2005-12-08 20:46:43 得分 0
帮顶接分Top
17 楼billjoy(虫虫头低低)回复于 2005-12-08 20:51:26 得分 0
?_?Top
18 楼huangjianmin(撒旦使者)回复于 2005-12-08 21:34:19 得分 0
人家明明说清楚了,听的人硬是要说人家没说清楚.
刀把抓在听的人手里,他爱怎么说怎么说吧.反正俺就当它一个"设备标识"Top
19 楼pomelowu(羽战士)回复于 2005-12-08 21:37:48 得分 0
那个面试官肯定不知道CSDN有个ID叫FengYuanTop
20 楼jinghao666666(努力工作!!!)回复于 2005-12-08 21:44:21 得分 0
楼主太阴了。连HDC都不知道还去面试?明明是自己正学习搞不懂非要说什么面试。其实你要是真心请教的话csdn肯定有不少人帮你的。这样把高手都吓跑了。靠。没人性。Top
21 楼boyzhang(张郎)(爱你爱到Windows没BUG的那天)回复于 2005-12-08 21:45:14 得分 0
什么是设备呀? /:)Top
22 楼nlstone(天外流星)回复于 2005-12-08 21:48:11 得分 0
我来给个标准参考答案:)
Usually, the main information of a handle is an integer index into an internal table. But this is not always true. GDI handles have extra information like object type and a re-use count. Some handles are actually pointers.
There are three major groups of handles:
1) kernel handles, exposed by KERNEL32.DLL. Files, thread, process, ..
2) user handles, exposed by USER32.DLL. Icons, menus, windows, cursors, ...
3) GDI handles, exposed by GDI32.DLL. DC, font, region, DDB, DIB section, pen, brush.
Top
23 楼nlstone(天外流星)回复于 2005-12-08 21:54:30 得分 0
鉴于这里小菜同志为数不少,补充一下,windows内部有好几张大表,用来记录内核的各类数据,如进程/文件/显示资源什么的,用户要使用这些核心资源,就要能直接或间接知道这些资源在表中的位置,HDC大多数时候就是作为一个整数索引来标记该资源在表中的位置,这就是上面提到的:
Usually, the main information of a handle is an integer index into an internal tableTop
24 楼mabaocheng(做好.NET的学习者)回复于 2005-12-09 08:28:27 得分 0
我水平是水,抛开问题本身不说,主考官这么说CSDN上的兄弟们,感觉这样的主考官在公司很不懂得为人!Top
25 楼yooono(Di调)回复于 2005-12-09 09:06:59 得分 0
他得罪我了
但是我又能拿他怎么办呀!Top
26 楼lonely001(独行客)回复于 2005-12-09 09:35:47 得分 0
这个问题如果楼主去看过《Windows图形编程》应该就会有答案了。
好象这本书的作者在CSDN也有个ID,五星的:)Top
27 楼rainliuyu(今天不下雨)回复于 2005-12-09 09:58:06 得分 0
能告诉我身份证号码是干吗的吗?Top
28 楼guosx(玄远)回复于 2005-12-09 10:41:22 得分 0
markTop
29 楼snakebite2008(3DFX)回复于 2005-12-09 10:46:10 得分 0
参考UNIX操作系统教程,里面关于设备的描述
其实我觉得Windows是从UNIX系列变异(或着仿造)出来的一个"怪胎",有些地方还残留着些许痕迹Top
30 楼lzzqqq(Jonersen)回复于 2005-12-09 10:55:06 得分 0
句柄就是一个指针,指向一个东西,他想让你说清楚什么?搞什么破飞机?Top
31 楼lzzqqq(Jonersen)回复于 2005-12-09 11:00:51 得分 0
之所以叫"句柄"而不叫指针,其实就是个指针,只是操作系统为了安全或别的不可告人的原因,不想告诉你他指向的具体数据结构.其实就是个指针啊.这个鸟考官到底懂不懂啊?Top
32 楼vc_asm(哥俩好)回复于 2005-12-09 11:03:32 得分 0
路过,填碗水
Top
33 楼lqm1003(江南倦客)回复于 2005-12-09 11:23:46 得分 0
自己想问问题就直说吧,
不过看样子楼主的激将法不是很管用Top
34 楼pinel()回复于 2005-12-09 11:42:22 得分 0
就是一个数据结构的指针Top
35 楼longx()回复于 2005-12-09 11:51:40 得分 0
本质上句柄就是指针, Windows 为什么引入句柄? 主要是因为 Windows内存管理决定的,由于程序可能从内存保存到磁盘文件,以后又装入内存, 每次装入的内存区域可能各不相同, 如果直接使用指针,问题就出现了, 引入句柄作为内核对象(常住内存)从而间接指向应用程序数据,Windows 内存管理程序负责应用程序从磁盘装入时,负责修改句柄所指向的地址。Top
36 楼iicup(双杯献酒)回复于 2005-12-09 11:54:06 得分 0
好像是
#define HDC UINTTop
37 楼wjyasd(金子鱼)回复于 2005-12-09 12:33:29 得分 0
0xXXXXXXXXTop
38 楼jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程。和气生财。共同提高。共同进步!)回复于 2005-12-09 12:52:50 得分 0
如果你想开门的话,那么找门把手;
如果你想颠大勺的话,那么找勺把;
如果你想在QQ上找到我的话,可以在查找里填入我的QQ号;
你想知道这篇回复是谁写的,记住JYK就可以了;
你想找到一个窗口的话,找到窗口的句柄就行了。
Top
39 楼xnlcx(J2EE.Net)回复于 2005-12-09 12:57:44 得分 0
梁肇新先生说 .Net和Java就像别人挖好的一座金碧辉煌的大坑,引诱程序员往里跳......
DTop
40 楼firmbird(firmbird)回复于 2005-12-09 13:11:45 得分 0
=>typedef HANDLE HDC
=>typedef PVOID HANDLE
正如楼上有人说的就是一个指针嘛,真想问问哪个鸟考官他想问什么?他自己能不能说清楚HDC是什么。微软定义的数据结构,又没公开,谁知道是什么样子的呢Top
41 楼woanon(嗳老虎游)回复于 2005-12-09 13:34:40 得分 0
晕呼呼Top
42 楼codewarrior(会思考的草)回复于 2005-12-09 13:46:12 得分 0
呵呵,欢迎袁老大去bs此人。Top
43 楼wjjdnajj(色空)回复于 2005-12-09 14:02:40 得分 0
指针Top
44 楼aa3000(杀手K)回复于 2005-12-09 14:50:06 得分 0
.Net 和 JAVA 是大坑?我还没跳呢。Top
45 楼WuOu(天堂*蓝珀湖*仰音*诚彦)回复于 2005-12-09 15:28:52 得分 0
Mark.Top
46 楼rizzk_sun(我是小把戏)回复于 2005-12-09 16:09:43 得分 0
我来学习,顺便BS那面试官Top
47 楼eslbs(书林跋涉)回复于 2005-12-09 16:54:04 得分 0
同意
看 《WINDOW图形编程》 可以对HDC有进一步的了解
汗 这本书是中国人用英语写的 然后由另一批中国人翻译成中文的书……
写的很深
能看懂的人就算很厉害的人了……
Top
48 楼lisiyong(小样)回复于 2005-12-09 16:56:40 得分 0
Mark.
Top
49 楼jimmyge(Do Re Mi)回复于 2005-12-09 17:04:35 得分 0
www.baidu.comTop
50 楼weiyongzhao(好人)回复于 2005-12-09 17:47:12 得分 0
能听到高手讨论,真是不枉我打开这个页面。Top
51 楼pomelowu(羽战士)回复于 2005-12-09 17:50:07 得分 0
看来还是很多人不知道FengYuan... 嘿嘿~Top
52 楼fisheryj(重新开始)回复于 2005-12-09 18:11:03 得分 0
大哥 你什么都不会就不要去面试了
免得又出什么新闻
大学毕业生月薪200
晕倒Top
53 楼cssin(Steven Liu)回复于 2005-12-09 21:25:50 得分 0
在WINDOWS下写东西,没必要把什么都搞清楚吧!
先学会怎么用再说,连用都用不好,怎么可能搞的清楚~~Top
54 楼JFlyer(一万年太久,只争朝夕)回复于 2005-12-09 21:37:40 得分 0
在我看来所有句柄都是void* ,HWND与HDC在本质上都是相同的,都是指向一段内存空间的指针,但又有所不同,但这个不同是指给编译器看的,在SDK中没有类的概念,HWND可以看作在面向对象编程中指向wndclass窗口类的指针,HDC可以看作是指向DeviceCaps设备描述符类的指针。Top
55 楼zx_sanjin(www.chmbook.com - CHM电子书网)回复于 2005-12-11 10:25:38 得分 0
如果说大部分人说不清楚那倒是真的,如果说没人那就只能说面试官孤陋寡闻。这种借助贬低一个群体来抬高自己身价的人RP可能也不怎么样。
说CSDN没有高手,那是井底之蛙:
不知道袁老大是何许人的请看,他在CSDN的ID是FengYuan:
姓名 袁峰
网站 www.fengyuan.com
电邮 fyuan@fengyuan.com
博客 blog.joycode.com/fyuan
社区 CSDN
简历 1978 至 1982 上海工业大学 学士. 首次编程用 ALGOL, 国产 709 机, 纸带穿孔. 毕业用 CPM/86, 八寸软盘.
1982 至 1991 南京大学 硕士, 博士, 讲师. 项目有编译, 软件自动化, 知识工程, 电脑绣花软件.
1993 至 2001 新加坡惠普, 后美国惠普, 软件设计工程师. 产品有掌上机, 计算器, 喷墨打印机. 著 《Windows 图形编程》.
2001 至 今 微软, 软件设计工程师. 专攻 GDI, GDI+, Avalon, 打印系统.
-------------------------------------------------------
MyCSDN - CSDN离线数据浏览工具。(恒金软件出品)
可下载论坛文件、文档文章和全文搜索论坛数据以供离线浏览。支持签名回复。
下载地址:http://nj.onlinedown.net/soft/6591.htmTop
56 楼aspvbjava(注定走入地狱)回复于 2006-03-15 13:04:02 得分 0
句柄是映射到进程空间的虚拟内存地址吧?Top
57 楼echomo123(无语)回复于 2006-03-15 13:28:51 得分 0
什么公司那么鸟啊?Top
58 楼baodi_z(冷冷的太阳)回复于 2006-03-15 13:32:58 得分 0
去MS问吧,肯定有人知道Top




