【发布时间】:2017-05-06 18:04:59
【问题描述】:
我有点困惑。当一个文件被拖到带有 WS_EX_ACCEPTFILES 标志的窗口时,它会将 PostMessage 放入 WndProc 函数中,该函数将 UINT 消息设置为 WM_DROPFILES,并且根据
https://msdn.microsoft.com/en-us/library/windows/desktop/bb774303(v=vs.85).aspx
WPARAM = (WPARAM) (HDROP) hDrop;所以我假设我可以使用 WPARAM 来初始化 HDROP 或者只是将它传递给 DragQueryFile 是错误的吗??
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_CREATE:
return 0;
case WM_DROPFILES:
TCHAR* FilePath;
HDROP hDrop = wParam; //wParam cannot be used to ini. an entity of type HDROP
//HDROP hdrop = (HDROP)wParam; initialization of hDrop is skipped by case label
DragQueryFile(wParam, 0, FilePath, 0); //wParam not compatible
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
感谢任何帮助。
【问题讨论】:
-
为什么要在这里标记
c++?这是纯 C。 -
@i486:如果它通过 C++ 编译器传递,它就是 C++。我什至不相信 C 会给出这个错误。
-
@BoundaryImposition C++ 编译器作为
.c源文件的 C 编译器工作,或者可以选择。 Win32 API 是 C 语言,在上面的例子中没有 C++。 -
@i486:如果在 C 模式下运行,GCC 是 C 编译器,而不是 C++ 编译器。您根本无法从上面的小代码 sn-p 判断 OP 是在编写 C 还是 C++,句号。他们选择了c++ 标签这一事实有力地证明了它是 C++,远胜过你的“这是纯 C”断言,没有任何证据支持。
-
@BoundaryImposition 问题中的示例是 C 语言,Win32 API 基于 C,而不是 C++。至少问题的可能答案中的所有内容都将在 C 中。那么 - 为什么要谈论 C++?