拖放对话框





3.00/5 (6投票s)
2002年3月28日
2分钟阅读

98011

3300
一个可以通过点击任意位置来在屏幕上拖动的对话框类。
引言
我编写了一个支持拖放的对话框类。
首先,我将描述如何将拖放行为添加到现有的对话框中 - 这非常简单。
将 DragDialog.h 和 DragDialog.cpp 复制到您的项目目录中。 例如,我的对话框类名为 CTestDragDlg。
在 StdAfx.h 或对话框的 .h 和 .cpp 文件中包含 DragDialog.h。 打开对话框的头文件,并搜索如下所示的行
class CTestDragDlg : public CDialog将
CDialog
更改为 CDragDialog
,它应该如下所示class CTestDragDlg : public CDragDialog
现在打开对话框的 .cpp 文件,并搜索如下所示的行
CTestDragDlg::CTestDragDlg(CWnd* pParent /*=NULL*/) : CDialog(CTestDragDlg::IDD, pParent) { //{{AFX_DATA_INIT(CTestDragDlg)只需将
CDialog
替换为 CDragDialog
...现在搜索代码中类似如下内容的部分
BEGIN_MESSAGE_MAP(CTestDragDlg, CDialog) //{{AFX_MSG_MAP(CTestDragDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP END_MESSAGE_MAP()将
CDialog
替换为 CDragDialog
。现在尝试编译它!
如果您在使用预编译头时遇到任何错误,请转到项目选项并说明您将不使用预编译头。
恭喜您,您现在拥有一个拖放对话框!
选项
现在您可以更改 DragDialog 的拖动行为,以下是一些示例。
- 通常,对话框可以使用鼠标左键拖动,如果您想使用鼠标右键,请调用
SetDragButtons(FALSE, TRUE);
现在,鼠标右键可以拖动对话框。
- 调用
SetDragButtons(TRUE, FALSE);
并且鼠标左键将被激活用于拖动。
- 如果用户不允许将对话框拖出屏幕(超出可见屏幕)。 调用
KeepDialogInScreen(TRUE);
- 如果您想将对话框移回屏幕上,因为用户将其拖出屏幕或其他类似情况,只需调用
GetDialogBackToScreen();
。
- 您是否厌倦了拖动时的标准鼠标光标? 没问题,只需调用
SetDragCursor(IDC_CURSOR_DRAG);
。 您必须将 IDC_CURSOR_DRAG 替换为您的鼠标光标的 ID。 现在,如果您害怕新的光标,请调用UseDragCursor(FALSE);
。
- 这是一个很酷的效果,如果您希望在拖动时对话框具有“透视”效果,请调用
SetFadeWhileDragging(100)
,其中值(在本例中为 100)将调节其他窗口的透视程度。 如果值为 0,对话框将完全不可见;如果值为 255 或参数 NOFADE,对话框将在拖动时正常绘制。
玩得开心!