浏览器大全:是一个提供流行浏览器教程、在线学习分享的学习平台!

C#下完成空白窗体上中文输入,可以完成类PS的文字工具

Adobe Photoshop,简称“PS”,是由Adobe Systems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具,可以有效地进行图片编辑工作。ps有很多功能,在图像、图形、文字、视频、出版等各方面都有涉及。
C#下实现空白窗体上中文输入

关键字:类PS的文字工具,中文输入.重复截取中文

最近在研究做一个类PS的文字工具,查了N多的资料,问了N多个人,总算功夫不负有人心.终于给弄出来了.写出来给大家一起讨论.

在空白窗体上打开输入法,在C#里的空白窗口是无论如何也是打不开输入法.设置了this.ImeMode= ImeMode.NoControl也是无法打开输入法的录字窗口.去Microsoft 开发论坛上问了一些问题.感谢周雪峰版主与Riquel_Dong 版主给的指点.用了API函数: ImmAssociateContext(IntPtr hWnd, IntPtr hIMC);终于把输入法给调了出来,它的功能是把输入与指定的窗口进行关联.


代码如下:


f (m.Msg == WM_IME_SETCONTEXT && m.WParam.ToInt32() == 1)


{


ImmAssociateContext(this.Handle, m_hImc);


}


现在可以调用输入法了.可是又出现了新的问题.怎么样取得输入法录字窗体上的字呢.


当打开输入法输入文字时,会发送WM_IME_CHAR的消息.我们在这个消息下处理下就可以得到汉字了


可以用IMM的函数: ImmGetCompositionString(IntPtr hIMC, int dwIndex, StringBuilder lpBuf, int dwBufLen);取得录字窗体上输入的汉字或者NUICODE类的字.当然,这里就不研究别的了.只说汉字问题.


取字的代码如下:


case WM_IME_CHAR:

int size = ImmGetCompositionString(m_hImc, GCS_COMPSTR, null, 0);


size += sizeof(Char);


ImmGetCompositionString(m_hImc, GCS_RESULTSTR, str, size);


sb.Append(str.ToString());


MessageBox.Show(str.ToString());


intoText();//打印文字


isShowChina = true;




break;

OK,.好象是大功告成了.测试了一下才发现打印出来的都是重复的文字.比如输入”为人民服务”,打印出的却是”为为人人民民服服务务”我的天呐,问题出在哪里呢.


去查了一下MSDN.对WM_IME_CHAR有这样的说明:


the WM_IME_CHAR message includes a double-byte character and the application passes this message to DefWindowProc


是不是问题就出在这里了.是发送消息两次的问题.


看了一个网上的讨论,得出一个解决方案:加上判断


if (m.WParam.ToInt32() == PM_REMOVE)


{


}


测试.终于没有了问题了


代码帖子上


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Drawing;

using System.Data;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices;


namespace WindowsApplication2

{

public partial class UserControl1 : UserControl

{


IntPtr m_hImc;


bool isShowChina = false;

public const int WM_IME_SETCONTEXT = 0x0281;


private const int WM_IME_CHAR = 0x0286;


private const int WM_CHAR = 0x0102;


private const int WM_IME_COMPOSITION = 0x010F;


private const int GCS_COMPSTR = 0x0008;


[DllImport("Imm32.dll")]

public static extern IntPtr ImmGetContext(IntPtr hWnd);


[DllImport("Imm32.dll")]

public static extern IntPtr ImmAssociateContext(IntPtr hWnd, IntPtr hIMC);


[DllImport("imm32.dll")]

static extern int ImmGetCompositionString(IntPtr hIMC, int dwIndex, StringBuilder lpBuf, int dwBufLen);



private int GCS_RESULTSTR = 0x0800;


private const int HC_ACTION = 0;


private const int PM_REMOVE = 0x0001;



StringBuilder sb = new StringBuilder();


Font font = new Font("宋体", 14, FontStyle.Regular);

public UserControl1()

{

InitializeComponent();

}


private void UserControl1_Load(object sender, EventArgs e)

{

m_hImc = ImmGetContext(this.Handle);

}

protected override void WndProc(ref Message m)

{

base.WndProc(ref m);

if (m.Msg == WM_IME_SETCONTEXT && m.WParam.ToInt32() == 1)

{

ImmAssociateContext(this.Handle, m_hImc);

}

switch (m.Msg)

{

case WM_CHAR:

KeyEventArgs e = new KeyEventArgs(((Keys)((int)((long)m.WParam))) ModifierKeys);

char a = (char)e.KeyData; //英文

sb.Append(a);

intoText();

isShowChina = false;

break;

case WM_IME_CHAR:


if (m.WParam.ToInt32() == PM_REMOVE) //如果不做这个判断.会打印出重复的中文

{

StringBuilder str = new StringBuilder();

int size = ImmGetCompositionString(m_hImc, GCS_COMPSTR, null, 0);

size += sizeof(Char);

ImmGetCompositionString(m_hImc, GCS_RESULTSTR, str, size);

sb.Append(str.ToString());

MessageBox.Show(str.ToString());

intoText();

isShowChina = true;

}

break;

}

}

/// <summary>

/// 打印文字

/// </summary>

private void intoText()//

{

Graphics g = this.CreateGraphics();

g.DrawString(sb.ToString(), font, Brushes.Black, 10, 10);

}


}

}
C#下实现空白窗体上中文输入,可以实现类PS的文字工具

更多C#下实现空白窗体上中文输入,可以实现类PS的文字工具 相关文章请关注PHP中文网!


Photoshop默认保存的文件格式,可以保留所有有图层、色版、通道、蒙版、路径、未栅格化文字以及图层样式等。



相关软件

2345加速浏览器官方版

2345加速浏览器官方版 | 56.2MB

2345加速浏览器官方版

新一代2345加速浏览器采用Chromium和IE双内核,主打极速与安全特性。基于Chromium深度定制,引入网页智能预加载技术,访问网页更快速..

QQ浏览器官方正式版

QQ浏览器官方正式版 | 49.67MB

QQ浏览器官方正式版

QQ浏览器秉承TT浏览器1-4系列方便易用的特点,但技术架构不同,交互和视觉表现也重新设计,采用Chromium内核+IE双内核,让浏览快速稳定...

百度浏览器最新版下载

百度浏览器最新版下载 | 13.3MB

百度浏览器最新版下载

q百度浏览器,是一款简洁轻快、智能懂你的浏览器。依靠百度强大的搜索平台,在满足用户浏览网页的基础上,它整合百度体系业务优势,带给用户更方便的浏览方式功能...

UC浏览器官方正式版

UC浏览器官方正式版 | 44.2MB

UC浏览器官方正式版

UC浏览器(UC Browser)是UC Mobile Limited在2004年8月开发的一款软件,分uc手机浏览器和uc浏览器电脑版。UC浏览器是全球使用量最大的第三方手机浏览器...

猎豹浏览器2022最新版下载

猎豹浏览器2022下载 | 45MB

猎豹浏览器2022最新版下载

猎豹安全浏览器对Chrome的Webkit内核进行了超过100项的技术优化,访问网页速度更快。其具有首创的智能切换引擎,动态选择内核匹配不同网页...

360安全浏览器官方版下载

360安全浏览器下载 | 21.4MB

360安全浏览器官方版下载

360安全浏览器拥有全国最大的恶意网址库,采用恶意网址拦截技术,可自动拦截挂马、欺诈、网银仿冒等恶意网址。独创沙箱技术,在隔离模式即使访问****也不会感染...