| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1903 人关注过本帖
标题:一个windows程序,对字符编码不熟悉,求指教
只看楼主 加入收藏
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:5 
一个windows程序,对字符编码不熟悉,求指教
程序代码:
#include<windows.h>
#include<tchar.h>

 
LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wParam , LPARAM lParam);    //声明回调函数;

const TCHAR szWindowClass[] = _T("第一个窗口");
const TCHAR szWindowTitle[] = _T("主窗口标题");

int WINAPI _tWinMain (HINSTANCE hInstance , HINSTANCE hPreInstance , LPTSTR lpCmdLine , int nCmdShow)
{
    WNDCLASSEX wc = {0};            //初始化;
    wc.cbSize = sizeof(wc);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = (WNDPROC)WndProc;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(NULL , IDI_APPLICATION);          //使用系统默认的图标;
    wc.hCursor = LoadCursor(NULL , IDC_ARROW);            //使用系统默认的光标;
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);        //白色画刷;
    wc.lpszClassName = szWindowClass;
    RegisterClassEx(&wc);            //注册窗口;
    HWND hWnd = CreateWindow(szWindowClass , szWindowTitle , WS_OVERLAPPEDWINDOW , 100 , 200 , 500 , 500 , HWND_DESKTOP , NULL , hInstance , NULL);
    if(!hWnd)  return FALSE;        //如果窗口创建失败则退出;

    //显示并更新窗口
    ShowWindow(hWnd , nCmdShow);          //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 lParam)
{
    static wstring str;         //这里出错了,求解决;
    switch(msg) 
    {
    case WM_CHAR:
        {
            switch(wParam)                   //虚拟键码;
            {
            case 8:                                          //处理backspace
                if(str.size() == 0) return 0;                //如果字符串为空,则直接返回;
                str.erase(str.size() - 1 , 1);              //删除string的最后一个字符;
                break;
            default :
                str + = TCHAR(wParam);
            }
            InvalidateRect(hWnd , NULL , TRUE);              //刷新窗口;NULL代表刷新整个区域;
            return 0;
        }
    case WM_DESTROY :                                          //销毁窗口;
        PostQuitMessage(0);
        return 0;
    case WM_PAINT:
        {
            //TCHAR *str = _T("Hello World!");
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd , &ps);             //把ps中的无效区域清空;
            RECT r;
            GetClientRect(hWnd , &r);              //获取客户端的矩形框
            SetTextColor(hdc , RGB(255 , 0 , 0));
            //hdc是图形设备上下文,str是要输出的字符串,-1代表输出整个字符串,&r代表输出的矩形区域,
            DrawText(hdc , str.c_str() , -1 , &r , DT_WORDBREAK | DT_LEFT | DT_TOP);
            EndPaint(hWnd , &ps);
            return 0;
        }
    default :
        return DefWindowProc(hWnd , msg , wParam , lParam);               //系统处理这些消息
    }
}

错误信息:
程序代码:
1>e:\程序设计\win32project1\win32project1\源.cpp(39): error C2146: 语法错误: 缺少“;”(在标识符“str”的前面)
1>e:\程序设计\win32project1\win32project1\源.cpp(39): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:\程序设计\win32project1\win32project1\源.cpp(39): error C2065: “str”: 未声明的标识符
1>e:\程序设计\win32project1\win32project1\源.cpp(47): error C2065: “str”: 未声明的标识符
1>e:\程序设计\win32project1\win32project1\源.cpp(47): error C2228: “.size”的左边必须有类/结构/联合
1>          类型是“'unknown-type'1>e:\程序设计\win32project1\win32project1\源.cpp(48): error C2065: “str”: 未声明的标识符
1>e:\程序设计\win32project1\win32project1\源.cpp(48): error C2228: “.erase”的左边必须有类/结构/联合
1>          类型是“'unknown-type'1>e:\程序设计\win32project1\win32project1\源.cpp(48): error C2228: “.size”的左边必须有类/结构/联合
1>          类型是“'unknown-type'1>e:\程序设计\win32project1\win32project1\源.cpp(51): error C2065: “str”: 未声明的标识符
1>e:\程序设计\win32project1\win32project1\源.cpp(68): error C2065: “str”: 未声明的标识符
1>e:\程序设计\win32project1\win32project1\源.cpp(68): error C2228: “.c_str”的左边必须有类/结构/联合
1>          类型是“'unknown-type'

求指教一下我该如何修改,实在不知该怎么做了!谢谢了

[ 本帖最后由 笑傲 于 2013-6-23 18:16 编辑 ]
搜索更多相关主题的帖子: windows 
2013-06-23 18:00
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
收藏
得分:0 
本来想把错误的地方变一下颜色,突出一下,但是不会弄,
我在这里补充一下:错误之处是回调函数中的 static wstring str;报错,改为LPTSTR后还是有问题,我不知道怎么改,来这里求助一番

练就一身本领,只为笑傲江湖!
2013-06-23 18:34
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
收藏
得分:0 
难道真的没人会吗?帮帮忙啊

练就一身本领,只为笑傲江湖!
2013-06-25 15:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:25 
这提示不是很清楚吗,你用了wstring,但编译器找不到其定义
应该 #include <string>
using namespace std;

还有 str + = TCHAR(wParam); 应该是 str += TCHAR(wParam);

另外,把
static wstring str;
改为
#ifdef  _UNICODE
    static wstring str;
#else
    static string str;
#endif
之所以前几天没回答你,就是因为这个错误,犯这种错的代码,我一般不想看


[ 本帖最后由 rjsp 于 2013-6-25 16:00 编辑 ]
2013-06-25 15:58
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:5 
仔细看看呗

C++菜鸟
2013-06-25 18:24
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
收藏
得分:0 
回复 4楼 rjsp
我实在不懂这种问题怎么改了,我在网上也查了,但也许是没理解问题的本质,也没查到该怎么做,
真不是我不愿意思考,是我真的不知道怎么办。。。非常谢谢。。。

练就一身本领,只为笑傲江湖!
2013-06-25 20:26
快速回复:一个windows程序,对字符编码不熟悉,求指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023759 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved