windows简单打字程序出现的问题,在vc++6.0下运行,求大神指点

#include<windows.h>
#include<tchar.h>
#include<string>
using namespace std;

LRESULT CALLBACK WndProc(HWND hWindow,UINT iMessage,
WPARAM wParam,LPARAM IParam);
const TCHAR szWindowClass[]="第一个窗口";
const TCHAR szWindowTitle[]="主窗口标题";
int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevinst,
LPSTR IpCmdLine,int nCmdShow)
{
WNDCLASSEX wcex={0};
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style=CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc=(WNDPROC)WndProc;
wcex.hInstance=hInstance;
wcex.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wcex.lpszClassName=szWindowClass;

RegisterClassEx(&wcex);
HWND hWnd;
hWnd=CreateWindow(szWindowClass,szWindowTitle,
WS_OVERLAPPEDWINDOW|WS_VISIBLE,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
HWND_DESKTOP,NULL,hInstance,NULL);
if(!hWnd) return FALSE;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;

}
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,
WPARAM wParam,LPARAM IParam)
{
static wstring str;
switch(msg)
{
case WM_CHAR:
{
switch(wParam)
{
case 8:
if(str.size()==0)
return 0;
str.erase(str.size()-1,1);
break;
default:
str +=TCHAR(wParam);
}
InvalidateRect(hWnd,NULL,TRUE);
return 0;
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
case WM_PAINT:
{

PAINTSTRUCT ps;
HDC hdc =BeginPaint(hWnd,&ps);
RECT r;
GetClientRect(hWnd,&r);
SetTextColor(hdc,RGB(255,0,0));
DrawText(hdc,str.c_str(),-1,&r,DT_WORDBREAK|DT_LEFT|
DT_TOP);
EndPaint(hWnd,&ps);
return 0;
}
return 0;
default:
return DefWindowProc(hWnd,msg,wParam,IParam);
}
return 0;
}
error C2664: 'DrawTextA' : cannot convert parameter 2 from 'const unsigned short *' to 'const char

static wstring str;

改为static string str。
你的代码没有定义默认使用的字符集不是UNICODE,所以DrawText的定义应该是DrawTextA,需要传递的字符串应该是char类型而不是wchar_t类型。但是你的str变量却是wstring str,也就是宽字符(wchar_t与unsigned short相同)。你只要把static wstring str改为static string str就行了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-28
遇到这种不能转化的问题,有一个万能办法。
cannot convert <某个变量> from '<类型一>' to ‘<类型二>’

因为c语言对变量类型非常严格,所以会出现这种情况。这时我们需要强制类型转换。
方法是在变量前面加上要强制转换成的类型 并用()括起来。

(<类型二>) <某个变量>
这种形式。

在本例中,error C2664: 'DrawTextA' : cannot convert parameter 2 from 'const unsigned short *' to 'const char
也就是不能把DrawTextA函数的第二个参数转换成‘const char...’(后面没有复制全,你明白就行)
那就需要在DrawText函数的第二个参数前加上强制转化的类型


DrawText(hdc,(‘const char...’)str.c_str(),-1,&r,DT_WORDBREAK|DT_LEFT | DT_TOP);
第2个回答  2013-07-27
应该是 你传参数时 字符串 类型有问题
这个 VC编程经常遇见

很久不用 VC 编译器了,我用mingw gcc编译器 , 我修改了一你那个字符串 类型为string ,
在code::block 下 就直接编译通过了啊本回答被网友采纳

win10 打开VC++ 6.0遇到这种情况怎么办?求大神解答。
1、开始菜单→运行→输入msconfig回车 在里边的启动栏里把可疑的.dll前面的勾去掉就行了。2、开始→运行→msconfig→启动→把加载项可疑xx.dll的勾去掉→ 重启电脑一般就可以解决了,如果还弹出来再看下面:3、开始→运行→regedit→ 在下面的位置删除相应键值:HKEY_CURRENT_USER\\Software\\Microsoft\\Windo...

用vc++6.0出现执行cl.exe错误
1、VC++6.0在win10(7\/8)上,启动报错(0xc0000142),无法启动程序。2、编译报错"Compiling... Error spawning cl.exe",无法成功编译。3、点"打开"或者"添加"时程序崩溃。第2个问题主要出现在绿色版里,第1、3个问题xp之后的系统普遍都有。

win10系统下运行VC++6.0失败是怎么回事
方法如下:1、下载msdev.exe解压出来,然后找你的vc的安装目录。如果你没有安装时没有更改安装路径,那就默认在C:\\ProgramFiles(x86)\\MicrosoftVisualStudio\\Common\\MSDev98\\Bin这个目录下。如果是绿色版,先找到VC++6.0总的目录,再按照\\Common\\MSDev98\\Bin这个路径来找。2、直接将英文版的msdev.exe...

vc++6.0下简单创建窗口程序 无法运行
一般是指针的问题,我猜测你应该是在这个程序里面自己加过代码,而且里面肯定有指针变量。如果是我说的上述情况,那么看下面。问题的原因:你的指针没初始化,即是系统环境给你随机分配的空间,到这里,其实很多人都这样做过,但是他们的运行没事,只是会出现乱码的结果,或者奇怪的结果,而你呢,运气不...

windows程序设计中的程序 我在vc++ 6.0中无法运行 出现如下错误提示
估计你建的工程是 控制台的而不是Win 32 Gui的所以出现这样的错误,建议这样操作 在工程选项里面这样设置 [Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将\/subsystem:windows

我安装的是VC++6.0 编写了一个程序,老是提醒这个错误 到底是什么原因啊...
“CL.exe”是VC使用真正的编译器(编译程序),其路径在“VC根目录\\VC98\\Bin”下面,你可以到相应的路径下找到这个应用程序。因此问题可以按照以下方法解决:打开vc界面 点击VC“TOOLS(工具)”—>“Option(选择)”—>“Directories(目录)”重新设置“Excutable Fils、Include Files、Library Files、...

如何解决VC++6.0的程序无法执行?
1、首先,在打开VC++6.0后,我们在创建新“文件”时,要注意,创建的不是“C\/C++Header File”,而是“C++ source File”。2、然后,对自己的文件添加“文件名”和存储文件的位置: 可以看到后辍是“.c或.cpp”,而不是“.txt\/.h”等文件 3、其次,自己输入正确的程序,不得有缺“;”或者不...

简述在VC++6.0环境下运行一个C++源程序的步骤
1、首先,打开我们的VC++6.0编程软件,点击左上角的“文件”菜单,并选择“新建”。2、接着,选择“win32consoleapplication”(win32控制台程序)。3、然后,填写好工程的名称,以及创建的位置,并点击“确定”按钮。4、接着,在工程类型中选择“一个空工程”,然后,点击“完成”按钮。5、接着,...

如何在Visual C++ 6.0环境下运行C程序
方法\/步骤 1 进入Visual C++ 6.0集成环境:双击桌面上的快捷图标,进入Visual C++ 6.0集成环境,屏幕上出现Visual C++ 6.0的主窗口。在主窗口的顶部是主菜单栏,其中包括9个菜单项:文件、编辑、查看、插入、工程、组建、工具、窗口、帮助。左侧是项目工作区窗口,右侧是程序编辑窗口。2 输入和编...

为什么我在VC++6.0中执行一个程序时,老是出现下面的文字?
当VC++出现Compiling... Error spawning cl.exe 错误的解决办法有如下几种,请你尝试:方法1:启动VC时不要用图形界面,通过在命令提示符下输入:Msdev \/useenv运行(注意啦\/前面有个空格).它会强制使系统环境变量全高设置成正确值.而且,只需要使用一次这样的方式运行VC,以后再次通过双击图标的方式启动...

相似回答
大家正在搜