根据某些条件,CloseClipBoard()函数可以被调用两次。这样可以,还是会导致意外的错误?
ex ..
void Foo ()
{
if (::IsClipboardFormatAvailable(clipFormat) && OpenClipboard())
{
PasteGridText(clipText);
} ::CloseClipboard();
}
BOOL PasteGridText (LPCTSTR text)
{
ResetClipboardFeedback();..
if (error)
{
**CloseClipboard();**
}
return TRUE;
}
答案 0 :(得分:1)
要回答你的问题,是的,你可以两次调用CloseClipboard()而不会产生任何实际后果。
这是我跑的测试:
bool ocb = OpenClipboard(hwnd);
if(!ocb)
printf("Failed to open ClipBoard!\n");
else
printf("ClipBoard opened!\n");
bool ccb = CloseClipboard();
if(!ccb)
printf("Failed to close ClipBoard! Error: %lu\n", GetLastError());
else
printf("Closed the ClipBoard!\n");
ccb = CloseClipboard();
if(!ccb)
printf("Failed to close ClipBoard! Error: %lu\n", GetLastError());
else
printf("Closed the ClipBoard!\n");
结果:
ClipBoard opened!
Closed the ClipBoard!
Failed to close ClipBoard! Error: 1418
ERROR_CLIPBOARD_NOT_OPEN
1418 (0x58A)
Thread does not have a clipboard open.
但是,正如您对问题的评论中所提到的,每次调用OpenClipboard时,最好只调用一次CloseClipboard。我建议坚持这个惯例。