WEB开发网
开发学院软件开发VC 创建客户区窗口,列表框之间项的拖拽操作 阅读

创建客户区窗口,列表框之间项的拖拽操作

 2006-07-23 11:19:54 来源:WEB开发网   
核心提示: 有些人可能想知道 bCalcValidRects 以及 NCCALCSIZE_PARAMS 中的其它矩形是做什么用的,如果读一下文档,创建客户区窗口,列表框之间项的拖拽操作(2),你会发现 WM_NCCALCSIZE 的语义相当复杂,文档中说如果 bCalcValidRects 为 TRU

有些人可能想知道 bCalcValidRects 以及 NCCALCSIZE_PARAMS 中的其它矩形是做什么用的。如果读一下文档,你会发现 WM_NCCALCSIZE 的语义相当复杂。文档中说如果 bCalcValidRects 为 TRUE:“应用程序应该指示客户区的哪一部分包含有效的信息。系统将有效信息拷贝到新客户区中指定的区域”这种情况下,“第二个[矩形]在被移走或重新调整大小之前包含该窗口客户区的坐标”尽管所有这些描述好像够清晰,我还是不能完全把握。我也从来没有见过那个应用程序使用这些额外的矩形。我见过的应用程序都忽略 bCalcValidRects 并简单地修改第一个矩形,在 NCCALCSIZE_PARAMS 中设置客户区。

我之所以提到这个,是因为按照文档所言,如果 WPARAM/bCalcValidRects 是 FALSE,那么 LPARAM 不会指向 NCCALCSIZE_PARAMS 结构,而是单个的 RECT,客户区,然而 MFC 在所有情况中将 LPARAM 强制转换为 NCCALCSIZE_PARAMS。这似乎是个bug,虽然只要你仅修改 NCCALCSIZE_PARAMS 中的第一个矩形,你的程序是绝不会垮掉的。我运行了一些测试程序,确定当第一次创建窗口时,Windows 仅有一次用 bCalcValidRects=FALSE 来发送 WM_NCCALCSIZE。随后,不论窗口如何调整大小,Windows 都用 bCalcValidRects=TRUE 来发送 WM_NCCALCSIZE。你必须对两种情况都设置客户区,以便正常显示你的窗口。

唉,恐怕到现在我都没有阐明 bCalcValidRects 到底是做什么用的。微软的大佬们也没有给出足够文档来说明这个神秘的参数,只是说它是从 Windows 3.1 远古时期延续下来的。如今只要你始终对两种情况都作处理,并且只修改第一个矩形,一切都会OK。

我正在做一个商业棒球游戏程序。在我的用户界面中,我想让用户能在两个列表框之间实现拖拽操作。 MFC 有没有简单的方法来做到这一点?

上一页  1 2 3 4 5 6  下一页

Tags:创建 客户 窗口

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接