可以多次调用CloseClipboard()函数吗?

时间:2015-04-07 23:05:30

标签: windows visual-studio-2010 winapi mfc clipboard

根据某些条件,CloseClipBoard()函数可以被调用两次。这样可以,还是会导致意外的错误?

ex ..

void Foo ()
{
    if (::IsClipboardFormatAvailable(clipFormat) && OpenClipboard())
    {
        PasteGridText(clipText);
    }   ::CloseClipboard();
}

BOOL PasteGridText (LPCTSTR text)
{
    ResetClipboardFeedback();..

    if (error)
   {
       **CloseClipboard();**
   }

   return TRUE;
}

1 个答案:

答案 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。我建议坚持这个惯例。