EnumDisplayMonitors的MONITORENUMPROC回调中提供的句柄的可用性

时间:2019-06-05 00:32:10

标签: winapi gdi

// Update Stripe default card based on user choice exports.updateDefaultSource = functions.firestore .document("users/{userId}") .onUpdate(async (change, context) => { const newValue = change.after.data(); const previousValue = change.before.data(); console.log("previousValue.default_source: "+previousValue.default_source) console.log("newValue.default_source: "+newValue.default_source) if ( previousValue.default_source && newValue.default_source !== previousValue.default_source ) { // this triggers on every update to profile (more overhead), can we reduce this? try { console.log("newValue.default_source: "+newValue.default_source) const response = await stripe.customers.update( previousValue.customer_id, { default_source: newValue.default_source }, (err, customer) => { console.log(err); } ); return console.log("Response from Stripe update: " + response); } catch (error) { console.log(error); await change.ref.set( { error: userFacingMessage(error) }, { merge: true } ); return reportError(error, { user: context.params.userId }); } } }); 的{​​{1}}回调函数给了我两个句柄。 MONITORENUMPROC类型之一和EnumDisplayMonitors类型之一。

  • HMONITOR应该引用监视器。
  • HDC是该监视器的设备上下文的句柄。

在从回调函数返回之前,是否需要释放所有这些句柄?如果没有,他们会待多久?我可以保存以备后用吗?

1 个答案:

答案 0 :(得分:0)

  

我是否需要释放所有这些手柄,然后才能从   回调函数?

否,除非在文档中明确声明要发布,例如GetWindowDC函数:绘制完成后,必须调用ReleaseDC函数以释放设备上下文。 / strong>

  

我可以保存它们以备后用吗?

一般来说,是的。物理显示器具有相同的HMONITOR,只要它是桌面的一部分即可。发送WM_DISPLAYCHANGE消息时,任何监视器都可能从桌面上删除,因此其HMONITOR无效或已更改其设置。因此,应用程序应在发送此消息时检查所有HMONITOR是否有效。

HDC句柄来自EnumDisplayMonitors,其生命周期取决于HDC中的EnumDisplayMonitors参数。