- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我和一位程序员同事进行了一场小辩论。他在他的代码中使用了以下习语:
HWND hWnd = SomeFunctionWhichReturnsAWindow();
if(hWnd != NULL && hWnd != INVALID_HANDLE_VALUE)
{
// All good
}
else
{
// Error
}
我告诉他在我看来这是一个错误的方法,因为 HWND
类型与 INVALID_HANDLE_VALUE
定义无关,但他确信这是好的代码,因为有效句柄永远不会等于 INVALID_HANDLE_VALUE
,而且它的意思是“安全总比遗憾好”。
那么,这是一个可以接受的正确成语吗?
最佳答案
将 HWND
与 INVALID_HANDLE_VALUE
进行比较是错误的。虽然,在实践中,这不是一个会伤害你的错误。
CreateWindowEx
保留为无效的唯一 HWND
值是 NULL
。现在,它恰好是一个实现细节,INVALID_HANDLE_VALUE
永远不可能是一个有效的 HWND
,但这只是实现细节。生成窗口句柄的函数 CreateWindowEx
使用 NULL
来指示失败。这就是您需要知道的全部内容。
如果您想赢得与同事的争论,我建议您查看 SomeFunctionWhichReturnsAWindow
并找出调用了哪个 Win32 API 来生成 HWND
。然后查阅文档。这将告诉您 NULL
是保留的无效值。
为了清晰起见,您绝对应该更改代码以单独针对 NULL
进行测试。
关于c - 将 `HWND` 与 `INVALID_HANDLE_VALUE` 进行比较是错误的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26303039/
如何将 hwnd 类型数据存储和检索到一个平面文件中,并将其返回到 hwnd 类型变量中? 我是这样写的: HWND g_hWndApp, g_hWndApp1; ofstream myfile; m
我需要一些具体的帮助。我知道类名、所有者 hwnd 和窗口的大小。我如何获得它的hwnd?或者,至少,获取满足这些条件的所有窗口的列表。 提前致谢! 瓦利 最佳答案 您可以尝试使用此代码。它将为您提供
我确实了解如何重载运算符,但显然不完全了解。 谁能解释一下这部分的用法 WWindow::operator HWND() { // This overloaded operator allow
我尝试使用 DirectXTK 在我的游戏引擎中实现鼠标和键盘支持。这对于键盘来说非常简单,但是我在实现适当的鼠标支持方面遇到了问题。我在关注 THIS用于在我的引擎中实现鼠标。这篇来自 Micros
我有 2 个应用程序,一个是隐藏窗口(“hW”),另一个是控制台应用程序(“CA”),来自我想向硬件发送命令。在控制台应用程序中,我得到了硬件句柄,这是一个问题:如果我正在运行: PostMessag
我一直在改进我一直致力于的类(class),其中之一就是创建库来处理某些在我的主项目中并不真正需要看到的任务。但是,当我调用该类并实例化我刚刚创建的库时,我得到: Intellisense: argu
我正在应用程序中处理 ESC 键,收到此键后我希望关闭当前窗口。 我应该简单地调用DestroyWindow(hWnd)还是应该SendMessage(WM_CLOSE, hWnd, 0, 0),或者
我是说 WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify) 可以这样重写 WndProc_OnCommand(hWn
假设 GetDC(hWnd) 作为 WM_CREATE 上的第一条 指令被调用,对于窗口 hWnd, GetDC() 是否可能返回 NULL? 我担心 GetDC() 可能因资源不足而失败。当发生这种
我是这个社区的新手,在使用我的自动化脚本 1 时遇到问题,我想获取 HWND 的创建时间。 我在从 FindWindowEx 检索到的数组中有一组 HWND,我想在数组中找到最后根据系统时间创建的 H
我使用CreateCoreWebView2Host()方法创建了边缘浏览器窗口。此方法使用父窗口句柄并创建子窗口,我们可以在其中导航网页。导航完成后,我需要返回我的窗口句柄,但我认为我无法返回。 在S
当我们使用WindowFromPoint winapi函数时,我们通常可以得到这样的情况:Point指定窗口内的某个控件。在这种情况下,WindowFromPoint 返回该控件的句柄,而不是返回处理
我想知道您是否可以将句柄转换为窗口“HWND”。我需要使用“FindWindow”方法调用“PostMessage”函数。 我目前必须采购 HANDLE mainProcess; BOOL APIEN
为什么我在此处将桌面作为我的模态对话框的父 HWND? class CSaveProfileAsDlg: public CSimpleDialog { .... LRESULT OnInit
我正在将我的 HWND 传递给一个子流程,这样它就可以向我发送有关其进度的消息。有时我从未收到来自子流程的任何消息。在调查过程中,我发现我传递给子进程的 GetSafeHwnd() 似乎返回了我不期望
我又是伙计们,到目前为止,我已经设法学习了有关窗口创建和消息系统的大多数基础知识,现在我想问一下格式化,因为我没有设法在谷歌上找到任何关于我的特殊情况的信息。这是到目前为止的样子: 其中带有 0 的框
GetDesktopWindow() 仅返回主桌面。我也试过 EnumDisplayMonitors(),但没有返回桌面句柄。 最佳答案 您可以使用可用的函数来执行此操作,如下所示: 方法 1(对于重
我正在尝试创建一个简单的窗口,但我遇到了一些问题。编译器不会报错,但它根本无法创建窗口的 hWnd。它还表示正在使用“msg”变量而未初始化。这不是错误,只是警告,但是我感到不舒服。当我单击调试屏幕中
如何在另一个第三方应用程序中使用 C++ 获取 Combobox 的 HWND? MSDN 有一个函数叫做 GetDlgItem()但是第二个参数需要控件的 ID。有函数 GetDlgCtrlID()
当我编译我的代码时,应该打开一个窗口,但它没有。我已经创建了一个类、HWND 和应用程序处理程序;依然没有。 我有点新,很抱歉这个问题。 应用程序运行良好,没有错误,但窗口似乎没有出现。 #inclu
我是一名优秀的程序员,十分优秀!