Skip to content

Commit 1ad9277

Browse files
committed
Windows clipboard implementation.
1 parent 681f56b commit 1ad9277

File tree

3 files changed

+125
-1
lines changed

3 files changed

+125
-1
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#include "WAS_ClipboardHandler.hpp"
2+
#include "NE_Debug.hpp"
3+
#include "NUIE_VersionInfo.hpp"
4+
5+
namespace WAS
6+
{
7+
8+
ClipboardHandler::ClipboardHandler () :
9+
NUIE::ClipboardHandler (),
10+
formatId (0)
11+
{
12+
formatId = RegisterClipboardFormat (VSE_APP_NAME);
13+
}
14+
15+
ClipboardHandler::~ClipboardHandler ()
16+
{
17+
18+
}
19+
20+
NUIE::Version ClipboardHandler::GetCurrentVersion () const
21+
{
22+
return NUIE::GetCurrentVersion ();
23+
}
24+
25+
bool ClipboardHandler::IsCompatibleVersion (const NUIE::Version& version) const
26+
{
27+
return NUIE::IsCompatibleVersion (version);
28+
}
29+
30+
bool ClipboardHandler::HasClipboardContent () const
31+
{
32+
if (DBGERROR (!OpenClipboard (NULL))) {
33+
return false;
34+
}
35+
36+
HGLOBAL clipboardHandle = GetClipboardData (formatId);
37+
bool hasClipboardContent = (clipboardHandle != NULL);
38+
CloseClipboard ();
39+
40+
return hasClipboardContent;
41+
}
42+
43+
bool ClipboardHandler::GetClipboardContent (std::vector<char>& content) const
44+
{
45+
if (DBGERROR (!OpenClipboard (NULL))) {
46+
return false;
47+
}
48+
HGLOBAL clipboardHandle = GetClipboardData (formatId);
49+
if (clipboardHandle == NULL) {
50+
CloseClipboard ();
51+
return false;
52+
}
53+
54+
SIZE_T handleSize = GlobalSize (clipboardHandle);
55+
if (handleSize == 0) {
56+
return false;
57+
}
58+
59+
char* pointer = (char*) GlobalLock (clipboardHandle);
60+
content.assign (pointer, pointer + handleSize);
61+
GlobalUnlock (clipboardHandle);
62+
CloseClipboard ();
63+
64+
return true;
65+
}
66+
67+
bool ClipboardHandler::SetClipboardContent (const std::vector<char>& content)
68+
{
69+
if (DBGERROR (content.empty ())) {
70+
return false;
71+
}
72+
73+
if (DBGERROR (!OpenClipboard (NULL))) {
74+
return false;
75+
}
76+
77+
EmptyClipboard ();
78+
79+
HGLOBAL clipboardHandle = GlobalAlloc (GMEM_MOVEABLE, content.size ());
80+
LPVOID pointer = GlobalLock (clipboardHandle);
81+
memcpy (pointer, &content[0], content.size ());
82+
GlobalUnlock (clipboardHandle);
83+
84+
HANDLE resultData = SetClipboardData (formatId, clipboardHandle);
85+
if (DBGERROR (resultData == NULL)) {
86+
CloseClipboard ();
87+
return false;
88+
}
89+
90+
CloseClipboard ();
91+
return true;
92+
}
93+
94+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#ifndef WAS_CLIPBOARDHANDLER_HPP
2+
#define WAS_CLIPBOARDHANDLER_HPP
3+
4+
#include "WAS_IncludeWindowsHeaders.hpp"
5+
#include "NUIE_ClipboardHandler.hpp"
6+
7+
namespace WAS
8+
{
9+
10+
class ClipboardHandler : public NUIE::ClipboardHandler
11+
{
12+
public:
13+
ClipboardHandler ();
14+
virtual ~ClipboardHandler ();
15+
16+
virtual NUIE::Version GetCurrentVersion () const override;
17+
virtual bool IsCompatibleVersion (const NUIE::Version& version) const override;
18+
19+
virtual bool HasClipboardContent () const override;
20+
virtual bool GetClipboardContent (std::vector<char>& content) const override;
21+
virtual bool SetClipboardContent (const std::vector<char>& content) override;
22+
23+
private:
24+
UINT formatId;
25+
};
26+
27+
}
28+
29+
#endif

Sources/WindowsEmbeddingDemo/main.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "WAS_BitmapContextGdi.hpp"
33
#include "WAS_WindowsAppUtils.hpp"
44
#include "WAS_HwndEventHandler.hpp"
5+
#include "WAS_ClipboardHandler.hpp"
56
#include "WAS_NodeEditorHwndControl.hpp"
67
#include "WAS_ParameterDialog.hpp"
78

@@ -211,7 +212,7 @@ class MyNodeUIEnvironment : public NUIE::NodeUIEnvironment
211212
NE::BasicStringConverter stringConverter;
212213
NUIE::BasicSkinParams skinParams;
213214
WAS::HwndEventHandler eventHandler;
214-
NUIE::MemoryClipboardHandler clipboardHandler;
215+
WAS::ClipboardHandler clipboardHandler;
215216
NE::EvaluationEnv evaluationEnv;
216217
WAS::NodeEditorNodeTreeHwndControl nodeEditorControl;
217218
};

0 commit comments

Comments
 (0)