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

#include<windows.h>#include<tchar.h>#include<string>usingnamespacestd;LRESULTCALLBACK... #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
展开
 我来答
百度网友c6c78e9
2013-07-27 · TA获得超过2283个赞
知道小有建树答主
回答量:620
采纳率:0%
帮助的人:1013万
展开全部
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就行了。
luzhlon
2013-07-28
知道答主
回答量:40
采纳率:0%
帮助的人:21.1万
展开全部
遇到这种不能转化的问题,有一个万能办法。
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);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
flameleo11
2013-07-27 · TA获得超过5343个赞
知道大有可为答主
回答量:1943
采纳率:50%
帮助的人:1031万
展开全部
应该是 你传参数时 字符串 类型有问题
这个 VC编程经常遇见

很久不用 VC 编译器了,我用mingw gcc编译器 , 我修改了一你那个字符串 类型为string ,
在code::block 下 就直接编译通过了啊
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式