gpt4 book ai didi

c++ - 正确处理子类过程中的 WM_PASTE

转载 作者:行者123 更新时间:2023-11-30 04:07:42 29 4
gpt4 key购买 nike

相关信息:

我有一个子类过程需要在粘贴之前验证剪贴板的内容。

我已经成功获取到剪贴板的内容了,至少我是这么认为的。

问题:

不知如何构造如下if语句(以下为伪代码):

if( clipboard content is OK )
defaul handler;
else
discard message;

我为解决这个问题所做的努力:

到目前为止,这是我的想法:

LRESULT CALLBACK Decimalni( HWND hwnd, 
UINT message, WPARAM wParam, LPARAM lParam,
UINT_PTR uIdSubclass, DWORD_PTR dwRefData )

{
switch (message)
{
case WM_PASTE:
{
bool IsTextValid = true; // indicates validity of text

if( OpenClipboard(hwnd) ) // open clipboard
{
HANDLE hClipboardData;

// get clipboard data
if( hClipboardData = GetClipboardData(CF_UNICODETEXT) )
{
// Call GlobalLock so that to retrieve a pointer
// to the data associated with the handle returned
// from GetClipboardData.

wchar_t *pchData = (wchar_t*)GlobalLock(hClipboardData);

// copy clipboard data so we can free clipboard

wchar_t result[10]; // I just need first 9 characters
memset( result, L'0', sizeof(result) );

// copy clipboard data WITH TRUNCATION!!!
wcsncpy_s( result, 10, pchData, _TRUNCATE );

// Unlock the global memory.
GlobalUnlock(hClipboardData);

/*** parse the text for validity ****/
// code for parsing text
// update IsTextValid to indicate success or fail
/*** end of parsing *******/

}

// Finally, when finished I simply close the Clipboard
// which has the effect of unlocking it so that other
// applications can examine or modify its contents.

CloseClipboard();
}

// here should be the problematic if statement
if( IsTextValid )
return ::DefSubclassProc( hwnd, message, wParam, lParam);
else
return FALSE;
}
break;
case WM_CHAR:
{
// filter out some invalid keys
}
break;
case WM_NCDESTROY:
::RemoveWindowSubclass( hwnd, Decimalni, 0 ); // remove subclassing
break;
}
return ::DefSubclassProc( hwnd, message, wParam, lParam);
}

我的想法是否正确,或者是否有其他方法来形成我的 if 语句

谢谢。

最好的问候。

最佳答案

从所采取的行动来看,代码似乎是合理的。有点笨拙,但那是 Windows API。可能有更好的方法,但这应该可行。

一个错误:如果文本没问题,你应该调用 DefSubclassProc,而不是默认的窗口过程。

如果文本不正确,您可以考虑清空剪贴板。这里没有足够的关于你的其他要求来谈论那个。

关于c++ - 正确处理子类过程中的 WM_PASTE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22263612/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com