【问题标题】:create drag and drop event c++创建拖放事件c ++
【发布时间】:2013-03-12 21:05:57
【问题描述】:

如何使用 c++ WIN API 在后台从我的程序向其他程序发送拖放文件。 我的程序必须以编程方式执行此操作,无需用户操作,没有可见效果,背景平滑。 对拖拽技术不是很熟悉,目前了解需要使用OLE拖拽操作。

【问题讨论】:

  • “以编程方式模拟其他程序的拖放”是什么意思?您的程序将无法强制不同的程序开始拖放操作。您的意思是您希望您的程序能够接收丢弃的物品吗?
  • 我的意思是:模拟其他程序的拖放,我想创建一个拖放对象并将其发送给能够接收丢弃项目的其他程序。
  • 好吧,这不是模拟。这只是将您的应用程序注册为放置源,通过实现IDropSource 接口来完成。但现在我很困惑。您发布的链接是关于 .NET Framework,而不是 Windows API。你在找哪一个?
  • 也许你贴一个示例代码,我会测试

标签: c++ windows winapi visual-c++ c++builder


【解决方案1】:

您可以查看此代码链接

http://blogs.msdn.com/b/oldnewthing/archive/2004/12/06/275659.aspx

然后要使用此代码,您可以在 Visual Studio 中使用 COM ActiveX,如下所示

// 声明 DropTarget 类的单个实例

CDropSource codrop;

BOOL CALLBACK 
DlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   switch (message)
      { 
      case WM_INITDIALOG:
     // bind the drop target to the dialog
     codrop.SetHwnd(hwnd);
     RegisterDragDrop(hwnd, &codrop);
     return TRUE;
      case WM_COMMAND:
     if (LOWORD(wParam) == IDCANCEL)
        EndDialog(hwnd, IDCANCEL);
     return TRUE;
     case WM_LBUTTONDOWN:
       OnLButtonDown(hwnd, false,
               LOWORD(lParam), HIWORD(lParam), 0);
      break;
      case WM_DESTROY:
     // unbind the drop target from the dialog
     RevokeDragDrop(hwnd);
     return FALSE;
      }

   return FALSE;
}

// Applet 的标准 WinMain

int WINAPI 
WinMain(HINSTANCE hinstance, HINSTANCE, LPSTR, int)
{
   OleInitialize(0);
   DialogBox(hinstance, MAKEINTRESOURCE(IDD_DIALOG1), 0, DlgProc);
   OleUninitialize();
   return 0;
}

当然我没有测试代码,它可能需要大量调整才能工作,但你明白了

我猜你可以使用这个 shell API 来实现 wuty

http://msdn.microsoft.com/en-us/library/bb762151(v=vs.85).aspx

【讨论】:

  • 如果您再次阅读原始问题,您会发现 OP 正在询问如何模拟拖放到另一个应用程序的窗口上。这与您在此处发布的内容不同。
  • 拖拽是操作系统实现的,我问他:“首先我的理解是你的应用程序应该有一个COM接口,它可以是一个drop source或者一个drop target或者可以同时支持,如果你是一个拖放源,那么如果有人将你的窗口拖到他的窗口,你需要使用这个 API 来确定他是否是一个有效的目标并将数据发送给他,然后拖放可以你这样做了吗?我从你的代码中了解到,你正在尝试使用该功能,但我不知道在哪里“
  • 但是如果他想这样做,他将需要第三个应用程序来执行此操作,该应用程序可以控制鼠标从第一个应用程序移动到第二个应用程序,同时两个应用程序都支持 COM 接口或他可能会使用 WM_DROPFILES 消息,但我不确定它会起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
相关资源
最近更新 更多