4#include "Stroika/Frameworks/StroikaPreComp.h"
8#if qStroika_HasComponent_ATLMFC
12DISABLE_COMPILER_MSC_WARNING_START (5054)
14DISABLE_COMPILER_MSC_WARNING_END (5054)
18#if qSupportDrawTextGetTextExtent
20#include "SimpleTextImager.h"
21#include "SimpleTextStore.h"
22#include "WordWrappedTextImager.h"
28using namespace Stroika::Frameworks::Led;
29using namespace Stroika::Frameworks::Led::Platform;
31#if qLedAssertsDefaultToMFCAsserts && qStroika_Foundation_Debug_AssertionsChecked
32static class OneTimeLedMFCAssertionFunctionSetter {
34 static void MFCAssertionHandler (
const char* fileName,
int lineNum)
36 ::AfxAssertFailedLine (fileName, lineNum);
38 OneTimeLedMFCAssertionFunctionSetter ()
40 Led_SetAssertionHandler (MFCAssertionHandler);
42} sOneTimeLedMFCAssertionFunctionSetter;
47#if qProvideLedStubsForOLEACCDLL
53STDAPI CreateStdAccessibleObject (HWND hwnd, LONG idObject, REFIID riid,
void** ppvObject)
55 HINSTANCE oleACCDLL = ::LoadLibrary (_T (
"OLEACC.dll"));
57 if (oleACCDLL != NULL) {
58 HRESULT (WINAPI * pCreateStdAccessibleObject)
59 (HWND, LONG, REFIID,
void**) =
60 (HRESULT (WINAPI*) (HWND, LONG, REFIID,
void**)) (::GetProcAddress (oleACCDLL,
"CreateStdAccessibleObject"));
61 if (pCreateStdAccessibleObject != NULL) {
62 hr = (pCreateStdAccessibleObject)(hwnd, idObject, riid, ppvObject);
64 Verify (::FreeLibrary (oleACCDLL));
69STDAPI AccessibleObjectFromWindow (HWND hwnd, DWORD dwId, REFIID riid,
void** ppvObject)
71 HINSTANCE oleACCDLL = ::LoadLibrary (_T (
"OLEACC.dll"));
73 if (oleACCDLL != NULL) {
74 HRESULT (WINAPI * pAccessibleObjectFromWindow)
75 (HWND, DWORD, REFIID,
void**) =
76 (HRESULT (WINAPI*) (HWND, DWORD, REFIID,
void**)) (::GetProcAddress (oleACCDLL,
"AccessibleObjectFromWindow"));
77 if (pAccessibleObjectFromWindow != NULL) {
78 hr = (pAccessibleObjectFromWindow)(hwnd, dwId, riid, ppvObject);
80 Verify (::FreeLibrary (oleACCDLL));
86LresultFromObject (REFIID riid, WPARAM wParam, LPUNKNOWN punk)
88 HINSTANCE oleACCDLL = ::LoadLibrary (_T (
"OLEACC.dll"));
90 if (oleACCDLL != NULL) {
91 LRESULT (WINAPI * pLresultFromObject)
92 (REFIID, WPARAM, LPUNKNOWN) = (LRESULT (WINAPI*) (REFIID, WPARAM, LPUNKNOWN)) (::GetProcAddress (oleACCDLL,
"LresultFromObject"));
93 if (pLresultFromObject != NULL) {
94 hr = (pLresultFromObject)(riid, wParam, punk);
96 Verify (::FreeLibrary (oleACCDLL));
107Led_MFCReaderDAndDFlavorPackage::Led_MFCReaderDAndDFlavorPackage (COleDataObject* dataObject)
109 , fDataObject (dataObject)
114bool Led_MFCReaderDAndDFlavorPackage::GetFlavorAvailable (Led_ClipFormat clipFormat)
const
117 return fDataObject->IsDataAvailable (clipFormat);
120size_t Led_MFCReaderDAndDFlavorPackage::GetFlavorSize (Led_ClipFormat clipFormat)
const
123 HGLOBAL hObj = fDataObject->GetGlobalData (clipFormat);
128 fDataObject->BeginEnumFormats ();
129 while (fDataObject->GetNextFormat (&formatC)) {
130 if (formatC.cfFormat == clipFormat) {
131 hObj = fDataObject->GetGlobalData (clipFormat, &formatC);
138 size_t result = ::GlobalSize (hObj);
143size_t Led_MFCReaderDAndDFlavorPackage::ReadFlavorData (Led_ClipFormat clipFormat,
size_t bufSize,
void* buf)
const
145 HGLOBAL hObj = fDataObject->GetGlobalData (clipFormat);
150 fDataObject->BeginEnumFormats ();
151 while (fDataObject->GetNextFormat (&formatC)) {
152 if (formatC.cfFormat == clipFormat) {
153 hObj = fDataObject->GetGlobalData (clipFormat, &formatC);
157 size_t sizeCopied = 0;
159 size_t realSize = ::GlobalSize (hObj);
160 sizeCopied = min (realSize, bufSize);
161 void* p = ::GlobalLock (hObj);
162 if (p !=
nullptr and sizeCopied != 0) {
163 (void)::memcpy (buf, p, sizeCopied);
165 ::GlobalUnlock (hObj);
168 Ensure (sizeCopied <= bufSize);
172COleDataObject* Led_MFCReaderDAndDFlavorPackage::GetOleDataObject ()
const
182Led_MFCWriterDAndDFlavorPackage::Led_MFCWriterDAndDFlavorPackage (COleDataSource* dataObject)
184 , fDataObject (dataObject)
189void Led_MFCWriterDAndDFlavorPackage::AddFlavorData (Led_ClipFormat clipFormat,
size_t bufSize,
const void* buf)
191 HGLOBAL dataHandle = ::GlobalAlloc (GMEM_DDESHARE, bufSize);
192 Execution::ThrowIfNull (dataHandle);
193 char* lockedMem = (
char*)::GlobalLock (dataHandle);
195 (void)::memcpy (lockedMem, buf, bufSize);
196 ::GlobalUnlock (lockedMem);
197 fDataObject->CacheGlobalData (clipFormat, dataHandle);
205COleDataSource* Led_MFCWriterDAndDFlavorPackage::GetOleDataSource ()
const
215MFC_CommandNumberMapping::MFC_CommandNumberMapping ()
217 AddAssociation (ID_EDIT_UNDO, TextInteractor::kUndo_CmdID);
218 AddAssociation (ID_EDIT_REDO, TextInteractor::kRedo_CmdID);
219 AddAssociation (ID_EDIT_SELECT_ALL, TextInteractor::kSelectAll_CmdID);
220 AddAssociation (ID_EDIT_CUT, TextInteractor::kCut_CmdID);
221 AddAssociation (ID_EDIT_COPY, TextInteractor::kCopy_CmdID);
222 AddAssociation (ID_EDIT_PASTE, TextInteractor::kPaste_CmdID);
223 AddAssociation (ID_EDIT_CLEAR, TextInteractor::kClear_CmdID);
224 AddAssociation (ID_EDIT_FIND, TextInteractor::kFind_CmdID);
232Led_MFC_TmpCmdUpdater::CommandNumber Led_MFC_TmpCmdUpdater::GetCmdID ()
const
237bool Led_MFC_TmpCmdUpdater::GetEnabled ()
const
242void Led_MFC_TmpCmdUpdater::SetEnabled (
bool enabled)
245 fCmdUI->Enable (enabled);
249void Led_MFC_TmpCmdUpdater::SetChecked (
bool checked)
252 fCmdUI->SetCheck (checked);
258 fCmdUI->SetText (text);
261#if qSupportDrawTextGetTextExtent
269CSize Led_GetTextExtent (CDC* cdc,
const Led_tString& text, CRect r,
bool wordWrap)
271 return Led_GetTextExtent<WordWrappedTextImager, SimpleTextImager, SimpleTextStore> (cdc, text, r, wordWrap);
281void Led_DrawText (CDC* cdc,
const Led_tString& text, CRect r,
bool wordWrap)
283 Led_DrawText<WordWrappedTextImager, SimpleTextImager, SimpleTextStore> (cdc, text, r, wordWrap);
#define RequireNotNull(p)
#define CompileTimeFlagChecker_SOURCE(NS_PREFIX, NAME, VALUE)
conditional_t< qTargetPlatformSDKUseswchar_t, wchar_t, char > SDKChar