网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月08日漏签0天
easyx吧 关注:10,955贴子:47,086
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1 2 下一页 尾页
  • 122回复贴,共2页
  • ,跳到 页  
<<返回easyx吧
>0< 加载中...

输入中文问题 完美解决!!

  • 只看楼主
  • 收藏

  • 回复
  • stophin
  • 四年级
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <easyx\graphics.h>
#include <conio.h>
#include <windows.h>
#include <string>
using namespace std;
void GetIMEString(HWND hWnd,string& str)
{
HIMC hIMC=ImmGetContext(hWnd);//获取HIMC
if (hIMC)
{
//这里先说明一下,以输入“中国”为例
//切换到中文输入法后,输入“zhongguo”,这个字符串称作IME组成字符串
//而在输入法列表中选择的字符串“中国”则称作IME结果字符串
static bool flag=false;//输入完成标记:在输入中时,IME组成字符串不为空,置true;输入完成后,IME组成字符串为空,置false
DWORD dwSize=ImmGetCompositionStringW(hIMC,GCS_COMPSTR,NULL,0); //获取IME组成输入的字符串的长度
if (dwSize>0)//如果IME组成字符串不为空,且没有错误(此时dwSize为负值),则置输入完成标记为true
{
if (flag==false)
{
flag=true;
}
}
else if (dwSize==0&&flag) //如果IME组成字符串为空,并且标记为true,则获取IME结果字符串
{
int iSize; //IME结果字符串的大小
LPSTR pszMultiByte=NULL;//IME结果字符串指针
int ChineseSimpleAcp=936;//宽字节转换时中文的编码
WCHAR *lpWideStr=NULL;//宽字节字符数组
dwSize=ImmGetCompositionStringW(hIMC,GCS_RESULTSTR,NULL,0);//获取IME结果字符串的大小
if (dwSize>0) //如果IME结果字符串不为空,且没有错误
{
dwSize+=sizeof(WCHAR);//大小要加上NULL结束符
//为获取IME结果字符串分配空间
if (lpWideStr)
{
delete []lpWideStr;
lpWideStr=NULL;
}
lpWideStr=new WCHAR[dwSize];
memset(lpWideStr,0,dwSize); //清空结果空间
ImmGetCompositionStringW(hIMC,GCS_RESULTSTR,lpWideStr,dwSize);//获取IME结果字符串,这里获取的是宽字节
iSize=WideCharToMultiByte(ChineseSimpleAcp,0,lpWideStr,-1,NULL,0,NULL,NULL);//计算将IME结果字符串转换为ASCII标准字节后的大小
//为转换分配空间
if (pszMultiByte)
{
delete [] pszMultiByte;
pszMultiByte=NULL;
}
pszMultiByte=new char[iSize+1];
WideCharToMultiByte(ChineseSimpleAcp,0,lpWideStr,-1,pszMultiByte,iSize,NULL,NULL);//宽字节转换
pszMultiByte[iSize]='\0';
str+=pszMultiByte;//添加到string中
//释放空间
if (lpWideStr)
{
delete []lpWideStr;
lpWideStr=NULL;
}
if (pszMultiByte)
{
delete [] pszMultiByte;
pszMultiByte=NULL;
}
}
flag=false;
}
ImmReleaseContext(hWnd,hIMC);//释放HIMC
}
}
void main()
{
initgraph(640, 480); // 创建绘图窗口 HWND hWnd=GetHWnd();
BeginBatchDraw(); // 设置批绘图模式
string str;
while(true)
{
if (kbhit()) //如果是ASCII输入
{
char c=getch();
if (c=='\b')
{
if (str.length()>0)
{
if (str.at(str.length()-1)&0x8000)
str.erase(str.end()-1);
str.erase(str.end()-1);
}
}
else if (c==27) { }
else {
str+=c;
}
}
else //除此之外,检测是否有IME输入,如果有,则将输入结果添加到string中
{
GetIMEString(hWnd,str);
}
if (str.length()>100)
str="";
outtextxy(0,0,str.c_str());
FlushBatchDraw();
// 延时
Sleep(15);
cleardevice();
}
closegraph();
}


  • stophin
  • 四年级
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
感谢 @i92076 提供的资料~~~ 


2026-03-08 05:16:11
广告
不感兴趣
开通SVIP免广告
  • stophin
  • 四年级
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

那个GUI程序终于可以输入中文啦哈哈


  • fammy043
  • 初二年级
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
为毛我vc6不能链接。。。
Compiling...
fa.cpp
Linking...
fa.obj : error LNK2001: unresolved external symbol _ImmReleaseContext@8
fa.obj : error LNK2001: unresolved external symbol _ImmGetCompositionStringW@16
fa.obj : error LNK2001: unresolved external symbol _ImmGetContext@4
Debug/fa.exe : fatal error LNK1120: 3 unresolved externals
Error executing link.exe.
还要在哪里添加什么lib吗?


  • yangw80
  • 初三年级
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
太强大了!不是一般的强大~~!


  • yangw80
  • 初三年级
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
补充一下,顶楼的代码需要在顶部加一句:
#pragma comment(lib,"Imm32.lib")


  • yangw80
  • 初三年级
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
加精华加精华~~,我顺便把 @i92076 找的资料地址转过来:
ht偶也tp://bbs偶也.csdn.net/topics/240022188
ht偶也tp://bbs偶也.csdn.net/topics/240015761
ht药药tp://blog切克闹.csdn.net/wbryfl/article/details/4771043


  • zjy93513
  • 三年级
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
还没有试,不过看上去很好很强大得样子,先顶个


2026-03-08 05:10:11
广告
不感兴趣
开通SVIP免广告
  • 周盛有
  • 三年级
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在VC6运行,报错:Cannot open include file: 'easyx\graphics.h': No such file or directory 为什么会这样的,还需要加些什么吗?我看了上面楼的解析,还是不太懂。我是把楼主的源代码直接复制过来的,还需要加些什么?


  • stophin
  • 四年级
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
今天看到了这个说法:http://www.cnblogs.com/pmer/archive/2011/11/05/2237055.html
“在代码中一眼瞄见了flag这个变量。经验表明,凡是有这个flag变量的代码,80%以上都是垃圾代码。道理很简单:首先,多数问题根本不需要设置这个别别扭扭标志变量,只有那些善于把自己的思维扭曲得如同烂麻花一样的人才喜欢时不时地祭出flag这个破烂的法宝。其次,即使需要设置标准变量,优秀的代码作者也不会使用这个含义模糊不清的名字作为标志变量名,而会用一个更贴切、意义更明确恰当更适合描述问题的名字。所以,一般来说,flag往往反映了代码的垃圾度。”
真的太打击人了,这段代码也用flag了,很多人的代码也肯定用过不只一个flag。请使用过而且正在使用flag代码的童鞋们发表一下看法吧,也求大神们的经验之谈...


  • stophin
  • 四年级
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
今天看到了这个说法:
“在代码中一眼瞄见了flag这个变量。经验表明,凡是有这个flag变量的代码,80%以上都是垃圾代码。道理很简单:首先,多数问题根本不需要设置这个别别扭扭标志变量,只有那些善于把自己的思维扭曲得如同烂麻花一样的人才喜欢时不时地祭出flag这个破烂的法宝。其次,即使需要设置标准变量,优秀的代码作者也不会使用这个含义模糊不清的名字作为标志变量名,而会用一个更贴切、意义更明确恰当更适合描述问题的名字。所以,一般来说,flag往往反映了代码的垃圾度。”
真的太打击人了,这段代码也用flag了,很多人的代码也肯定用过不只一个flag。请使用过而且正在使用flag代码的童鞋们发表一下看法吧,也求大神们的经验之谈...


  • yangw80
  • 初三年级
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
回复 11 楼:
这个问题不必在意。
你给的网址我看了,我个人认为,学术讲究的是“百家争鸣”,重点在“鸣”。而不是“百家厮杀”,认为相互攻击后剩下的就是正确的,这是不可取的。那个博客里面很多文章都有厮杀成分。
flag 在 windows sdk 里面大量存在,其他地方也有很多人这么做。至于他为什么说不好,很遗憾,他那附有攻击性的文字使我没看懂他的理由,更使我没有兴趣和这种人沟通。所以,我仍然会认为 flag 有用。


  • 周盛有
  • 三年级
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
候我也有这种想法,与身边的人比较谁的编程更短(更简洁),但是后来想了想,这没有什么必要,一味去追求更短的代码行,而导致自己失去了自己的编程风格,这只能当作思路的分享与参照,不能刻意去改变。当然,时间久了,你或许就会参透出属于自己的一种更简洁风格,这就是你的进步。因此,我也觉得吧主说的很有道理。


  • zjy93513
  • 三年级
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
为什么我把代码复制尝试之后好像不行啊


2026-03-08 05:04:11
广告
不感兴趣
开通SVIP免广告
  • zjy93513
  • 三年级
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
嗯 很好很强大


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 122回复贴,共2页
  • ,跳到 页  
<<返回easyx吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示