winapi中多行编辑中的意外行为 我在用C++中的Windows API创建一个多行编辑文本的程序。它由在客户端区域绘制文本的WM_PAINT消息组成,但插入符号在编辑时显示意外行为。它有时不打印字符,有时隐藏打印字符

winapi中多行编辑中的意外行为 我在用C++中的Windows API创建一个多行编辑文本的程序。它由在客户端区域绘制文本的WM_PAINT消息组成,但插入符号在编辑时显示意外行为。它有时不打印字符,有时隐藏打印字符,c++,winapi,C++,Winapi,代码是 #define UNICODE /* ** **ALL HEADER FILES ** */ #include<wchar.h> #include<windows.h> #include <errno.h> #include<conio.h> #include<iostream> #include<stdio.h> #include<resource.h> /* ** **ALL DEFINES CONS

代码是

#define UNICODE
/*
**
**ALL HEADER FILES
**
*/
#include<wchar.h>
#include<windows.h>
#include <errno.h>
#include<conio.h>
#include<iostream>
#include<stdio.h>
#include<resource.h>
/*
**
**ALL DEFINES CONSTANT
**
*/
#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00
LRESULT CALLBACK WindowProcedure(HWND,UINT,WPARAM,LPARAM);
using namespace std;
HWND hwnd_handle;
HWND hw;
HINSTANCE his;
int WINAPI WinMain(HINSTANCE hvalue,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
his=hvalue;
/////com=nCmdShow;
LPWSTR myname=L"MY WINDOWS CLASS";
MSG msg={0};
WNDCLASSW wc;
wc.hbrBackground=(HBRUSH)COLOR_BTNFACE;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.lpszMenuName=NULL;
wc.lpszClassName=myname;
wc.hCursor=NULL;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.style=0;
wc.hInstance=hvalue;
wc.lpfnWndProc=WindowProcedure;
if(!RegisterClassW(&wc))
{
return 0;
}
///////main window
hwnd_handle=CreateWindowW(myname,L"CODE EDITOR",WS_OVERLAPPEDWINDOW,240,80,600,600,NULL, NULL,hvalue, NULL);
ShowWindow(hwnd_handle,nCmdShow);
UpdateWindow(hwnd_handle);
////////HWND hwnd=CreateWindowW(L"STATIC",L"CODE EDITOR",WS_OVERLAPPEDWINDOW,24,8,60,6,hwnd_handle, NULL,hInstance, NULL);
while(GetMessageW(&msg,NULL,NULL,NULL))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
/////main_structure(hwnd);
hw=CreateWindowW(TEXT("edit"),TEXT(""), WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL|ES_MULTILINE|ES_AUTOHSCROLL|ES_AUTOVSCROLL ,3,0,600,600,hwnd,NULL,his,NULL);
}
    break;

case WM_COMMAND:
{
/////menu_function(hwnd,wParam);
}

    break;


case WM_PAINT:
{
        PAINTSTRUCT ps;
        RECT info;
        HBRUSH hbrush;
        HDC hdc = BeginPaint(hw,&ps);
        wcout<<"vishal";
TextOut(hdc,20,20,L"vishak",6);
EndPaint(hw,&ps);
}
    break;


case WM_DESTROY:
PostQuitMessage(0);
break;

default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
break;
}
}
///////all men
#定义UNICODE
/*
**
**所有头文件
**
*/
#包括
#包括
#包括
#包括
#包括
#包括
#包括
/*
**
**所有的定义都是常数
**
*/
#定义WINVER 0x0A00
#定义_WIN32_WINNT 0x0A00
LRESULT回调窗口过程(HWND、UINT、WPARAM、LPARAM);
使用名称空间std;
HWND HWND_手柄;
HWND-hw;
他的立场;
int WINAPI WinMain(HINSTANCE hvalue、HINSTANCE hPrevInstance、LPSTR lpCmdLine、int nCmdShow)
{
他的价值观;
/////com=nCmdShow;
LPWSTR myname=L“我的WINDOWS类”;
MSG={0};
WNDCLASSW wc;
wc.hbrBackground=(HBRUSH)颜色;
wc.hIcon=LoadIcon(空,IDI_应用程序);
wc.lpszMenuName=NULL;
wc.lpszClassName=myname;
wc.hCursor=NULL;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.style=0;
wc.hInstance=hvalue;
wc.lpfnWndProc=WindowProcedure;
如果(!RegisterClassW(&wc))
{
返回0;
}
///////主窗口
hwnd_handle=CreateWindowW(myname,L“代码编辑器”,WS_OVERLAPPEDWINDOW,240,80600600,NULL,NULL,hvalue,NULL);
ShowWindow(hwnd_手柄,nCmdShow);
更新窗口(hwnd_句柄);
////////HWND HWND=CreateWindowW(L“静态”,L“代码编辑器”,WS_重叠窗口,24,8,60,6,HWND_句柄,NULL,hInstance,NULL);
while(GetMessageW(&msg,NULL,NULL,NULL))
{
翻译信息(&msg);
发送消息(&msg);
}
返回0;
}
LRESULT回调窗口过程(HWND HWND、UINT msg、WPARAM WPARAM、LPARAM LPARAM)
{
开关(msg)
{
案例WM_创建:
{
/////主_结构(hwnd);
hw=CreateWindowW(文本(“编辑”),文本(“”),WS|u CHILD | WS|u VISIBLE | WS|u VSCROLL | WS|u HSCROLL | ES|u AUTOHSCROLL | ES|u AUTOVSCROLL,30600600,hwnd,NULL,his,NULL);
}
打破
case WM_命令:
{
/////菜单功能(hwnd、wParam);
}
打破
案例WM_油漆:
{
PAINTSTRUCT-ps;
RECT信息;
HBRUSH-HBRUSH;
HDC HDC=开始喷漆(硬件和ps);

wcout由于您使用编辑控件作为窗口的客户端区域,因此不要自己处理WM_PAINT;而是将文本添加到编辑控件(使用带有EM_SETTEXT或可能的EM_REPLACESEL的SendMessage)并让它进行绘图


此外,您应该处理WM_大小,并将编辑控件设置为实际的客户端区域大小。

为什么
wcout
WM_PAINT
中?它不会在您的窗口上打印任何内容。这里已经是您的7或8个帐户。可识别的编码样式和名称模式。问一个问题,然后为类似的问题创建新帐户another@OP尝试我想做一个非Rhtodox或“幻想”Windows API程序中的东西需要对Windows API有很好的了解。否则,你只是猜测如何实现你要实现的东西。与其猜测或试图成为试图找到橡子的瞎子,不如查找由经验丰富的WinAPI程序员编写的代码,或从模仿你的Windows API书籍中找到代码想要实现。这是一个公平的问题。但你为什么一直使用用户帐户?只使用一个用户帐户。我不会花时间回答这个问题,因为你不太可能阅读答案或接受答案。