打开 Rc文件把 RichEdit20A 修改为RichEdit20W即搞定 幸得一网友指点困扰了我一天
第一步 Alt+F7 -> C/C++ -> 预处理程序定义 加入 _UNICODE 第二步 Alt+F7 -> Link (链接) -> 分类选(输出)-> 在入口点写入(wWinMainCRTStartup)第三步应该属于辅助了如果你提示没有找到mfc42u.lib等信息 在安装盘里搜索到 带U的这几个LIB 拷贝到 VC87/MFC/LIB下
关于在VC6.0中开发多国语言显示问题的总结—(有源码作为部分参考)我来到这里,快有一个月了.都是因为该死的多国语言显示的问题,才让我在这里面结识了诸位,呵呵,在这里面我感觉到CHN-Programer的和睦和团结,不由得有时引发阵阵振兴祖国软件的豪情(呵呵,说笑那).在这里我要感谢帮助过我的人.当然很多问题都还要靠自己,但是没有你们这些人,我可能快要被老板炒鱿鱼了.我真正开始搞vc才三个月时间,就这一个月到了csdn后,进步最快.下面是我关于这个月以来我一直在研究的,关于在某些不同Win操作平台下,在我们的操作系统环境下,开发别国语言显示的问题.用来给初级程序员作为参考.(测试是在对话框里面进行的). 我们都知道windows操作系统有支持ANSI和支持Unicode的版本,也有都支持的.其中,windows98只能支持ANSI系统环境.windows2000可以支持Unicode和NSI.windowsCE只支持Unicode.WindowsXP好象也是两个都支持.所以我们在开发多国语言的时候一般都选用windows2000.因为我们可以构件Unicode工程来支持多国语言的显示.(如果你不理解什么是Unicode可以参看< >的第二章.(在 Read the rest of this entry »
typedef struct _charformat{ UINT cbSize; _WPAD _wPad1; DWORD dwMask; DWORD dwEffects; LONG yHeight; LONG yOffset; COLORREF crTextColor; BYTE bCharSet; BYTE bPitchAndFamily; char szFaceName[LF_FACESIZE]; _WPAD _wPad2;} CHARFORMATA;相当的明白了,我就不用多说了;对于CRichEditCtrl,它提供的关于格式的接口有:SetDefaultCharFormat(CHARFORMAT &cf);SetSel(CHARFORMAT &cf);大家都是明白人,一看便知,也不多说了,那么如何使用CFontDialog选择字体呢?呵呵,其实很简单咯,因为有这个东西 => CFontDialog::GetCharFormat(CHARFORMAT &cf);所以,总的实现可能就是这么简单的几句代码: CFontDialog fontdlg; int ret = fontdlg.DoModal(); if(IDOK == ret) { CHARFORMAT cf; fontdlg.GetCharFormat(cf); m_SendMsg.SetDefaultCharFormat(cf); }
一.常见问题a.可以编译,不能执行的AfxInitRichEdit();
b.升级默认的Riched版本(默认的有一些bug),如可在InitInstance中添加LoadLibrary(“RICHED20.DLL”) 最后注意 FreeLibrary
如果是CRichEditView基类的可用BOOL CXXXXXXView::PreCreateWindow(CREATESTRUCT& cs){//装入rich edit version 2.0if (LoadLibraryA(“RICHED20.DLL”) == NULL){AfxMessageBox(_T(“Fail to load \”riched20.dll\”.”),MB_OK | MB_ICONERROR);PostMessage(WM_QUIT,0,0);return FALSE;}
m_strClass = RICHEDIT_CLASSA;//for 2.0 class
return CRichEditView::PreCreateWindow(cs);} Read the rest of this entry »
作者:lixiaosan日期:04/07/2006
注: m_edit1代表ID为IDC_EDIT1的CEdit控件的control类型的变量 m_richedit1代表ID为IDC_RICHEDIT1的CRichEditCtrl控件的control类型的变量
——————————————————————————–1.设置edit只读属性
方法一: m_edit1.SetReadOnly(TRUE); 方法二: ::SendMessage(m_edit1.m_hWnd, EM_SETREADONLY, TRUE, 0); Read the rest of this entry »
如何用SendMessage模拟某一按钮的点击事件
今天在写程序的时候,用到了进程间的通信,上网查了些相关的资料,一般都是通过消息、共享内存、 socket,管道(Pipe),信箱(Mailslot),等等。因为我进程间通信的时候数据量不太大,所以就先测试了一下消息。
一般情况下,用消息来实现进程通信相对比较简单,自定义消息、手动添加消息映射、编写响应函数,发送端先FindWindow(),然后就向目标进程SendMessage()。自定义消息的测试没有什么问题,但在向目标进程发送系统消息时遇到了些问题,发送WM_CLOSE消息也可以,但是在我尝试发送按钮消息时,遇到了些麻烦,在查资料,并多次测试后终于搞定,看到网上一些资料都没有明确的答案,就把我的一些体会发在这里,有朋友遇到这个问题时也就少走点弯路。当然,我个人水平也很菜,高手就不要看了!
自定义消息和消息映射就不多说了,获取窗口进程:CWnd *pWnd=CWnd::FindWindow(NULL,str);
模拟其中窗口上的按钮点击事件可以采用以下的方法: Read the rest of this entry »
vc编程技巧之简单高效的字符串转换方法首先在需要作转换的作用域(比如某函数内)内加上这句USES_CONVERSION;然后如果是要从ANSI字符串转到UNICODE就调用wstr = A2W(astr);反之则调用astr = W2A(wstr); 对了不要忘记包含必要的头文件[code]#include <atlbase.h>[/code] 这样要比直接调用MultiByteToWideChar和WideCharToMultiByte简单多了吧。而且由于这组宏内部使用的是栈空间所以效率上也很高。
转自 http://jonsoft.cn/blog基本思路就是:1)用FindWindow()找到目标程序的窗口Handle。2)找到文本框的Handle,以及按钮的MessageID,3)用SendMessage()方法设置文字,并触发事件。我们先打开要控制的程序,如何将他隐藏就参看前几天的文章。“后台调用外部程序的完美实现(Delphi)后台调用外部程序的完美实现(Delphi“)”,这里我只要谈如何用消息来实现和程序的控制。首先我们得借助spy++,VC的工具有,各位就不用忙下载了。用其它的工具也可以了,这里只要是为了可以得到程序里面的控件的ID,第一步先用,Handle:= FindWindow(nil, Pchar(‘title’));找到程序的窗口。第二步:Handle1:=GetDlgItem(Handle,$0000040E);利用控件的ID得到控件的句柄,现在我们可以对句柄进行操作了。第三步:利用handle的消息触发事件。在这里我的Handle1是一个按钮,我可以向它发送一个按下的消息。SendMessage(Handle1,BM_CLICK,0,0);这样就相当于你自己点击了另一个程序中的某个按钮。当然你还可以有更多的控制。用spy++可以方便地找到控件的ID。偏移量 功能000003FA 退出程序000003EE 输出目录000003F0 关于000003F1 帮助000003F2 访问网页000003F3 注册000003F4 打开一个工程文件000003F5 保存一个工程文件 000003F8 开始转换0000040E 选项这是我今天早上做的,我将找到的句柄 给HANDLE1,然后发送消息给他来实现了对另一个程序的控制
一、引入Dialog技术
—- 下面介绍在制作ActiveX控件时引入有模式对话框技术,制作步骤如下:
创建一新的MFC ActiveX ControlWizard项目,取名为Hello,其他用缺省选项; 在ResourceView页中新增一对话框资源,命名为IDD_HELLODIALOG,可以在对话框上放自己的控件; 为对话框资源IDD_HELLODIALOG创建新类CHelloDialog,从CDialog继承; 确认在HelloCtrl.h中已加入语句#include “HelloDialog.h”,为CHelloCtrl类添加成员变量CHelloDialog m_helloDialog; 用ClassWizard在Automation页中为CHelloCtrl添加一方法void DoHello(),外部名亦为DoHello; void CHelloCtrl::DoHello() {// 显示对话框m_helloDialog.DoModal();} Read the rest of this entry »