Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 如何从richedit控件中精简宽字符串?_Winapi_Richedit_Widestring - Fatal编程技术网

Winapi 如何从richedit控件中精简宽字符串?

Winapi 如何从richedit控件中精简宽字符串?,winapi,richedit,widestring,Winapi,Richedit,Widestring,这是我的尝试,我不知道为什么EM_STREAMOUT遇到非ascii字符时返回问号 这段代码从窗口复制文本并再次放回,但这次只作为问号 #include <windows.h> #include <iostream> #include <richedit.h> #include <string> static DWORD CALLBACK EditStreamOutCallback(unsigned long dwCookie, LPBYTE p

这是我的尝试,我不知道为什么
EM_STREAMOUT
遇到非ascii字符时返回问号

这段代码从窗口复制文本并再次放回,但这次只作为问号

#include <windows.h>
#include <iostream>
#include <richedit.h>
#include <string>

static DWORD CALLBACK EditStreamOutCallback(unsigned long dwCookie, LPBYTE pbBuff, LONG cb, LONG* pcb)
{
  using namespace std;
  wstring* ps = (wstring*) dwCookie;
  *pcb = cb;
  for (long i = 0; i < cb; i++) {
    ps->append(1,pbBuff[i]);
  }
  return 0;
}

int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE, LPTSTR, int /* nCmdShow*/) {
  using namespace std;

  LoadLibraryW(L"Msftedit.dll");
  HWND richeditWindow = CreateWindowExW (
    WS_EX_TOPMOST,
    L"RICHEDIT50W",
    L"施氏食獅史",
    WS_SYSMENU | WS_VSCROLL | ES_MULTILINE | ES_NOHIDESEL | WS_VISIBLE,
    50, 50, 500, 500,
    NULL, NULL, NULL, NULL
  );

  wstring s;
  EDITSTREAM eds;
  eds.dwCookie = (unsigned long) &s;
  eds.dwError = 0;
  eds.pfnCallback = EditStreamOutCallback;
  SendMessageW(richeditWindow, EM_STREAMOUT, (WPARAM) SF_TEXTIZED, (LPARAM) &eds);
  SendMessageW(richeditWindow, EM_REPLACESEL, FALSE, (LPARAM) s.c_str());

  MSG msg;
  while(GetMessageW(&msg, 0, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessageW(&msg);
  }
  return 0;
}
#包括
#包括
#包括
#包括
静态DWORD回调EditStreamOutCallback(无符号长dwCookie、LPBYTE pbBuff、长cb、长*pcb)
{
使用名称空间std;
wstring*ps=(wstring*)dwCookie;
*pcb=cb;
对于(长i=0;iappend(1,pbBuff[i]);
}
返回0;
}
int WINAPI WinMain(HINSTANCE/*HINSTANCE*/,HINSTANCE,LPTSTR,int/*nCmdShow*/){
使用名称空间std;
LoadLibraryW(L“Msftedit.dll”);
HWND richeditWindow=CreateWindowExW(
最上面的,
L“RICHEDIT50W”,
L“施氏食獅史",
WS|u SYSMENU | WS|u VSCROLL | ES|u MULTILINE | ES|u NOHIDESEL | WS|u VISIBLE,
50, 50, 500, 500,
空,空,空,空
);
WSTS环;
编辑流eds;
eds.dwCookie=(无符号长)&s;
eds.dwError=0;
eds.pfnCallback=EditStreamOutCallback;
SendMessageW(richeditWindow、EM_STREAMOUT、(WPARAM)SF_文本化、(LPRAM)和eds);
SendMessageW(richeditWindow,EM_REPLACESEL,FALSE,(LPARAM)s.c_str());
味精;
while(GetMessageW(&msg,0,0,0)){
翻译信息(&msg);
DispatchMessageW(&msg);
}
返回0;
}
SendMessageW(richeditWindow,EM_STREAMOUT,(WPARAM)SF_文本化|SF_UNICODE,(LPARAM)和eds)