2009年06月18日
新建一个win32动态库工程,把source目录下所有文件加入(mak文件可不加),在freepy.h文件中#include 上加一行代码:#define NOIME
把imm目录下两个文件复制到工程目录中,在工程属性-链接器-输入选项中,附加依赖项加上IMM32.LIB,模块定义文件加上freepy.def
在imm.h文件中,把下面代码(原来就有)拖放在#ifndef _IMM_上面:
typedef struct tagCANDIDATEINFO {
DWORD dwSize;
DWORD dwCount;
DWORD dwOffset[32];
DWORD 阅读全文>
发表于 @ 2009年06月18日 22:12:00|评论(loading...)|编辑|举报|收藏
2009年03月28日
一、如何安装
1、安装VC++2008 Express或者VS2008,启动程序,使其完成初始配置工作。
2、安装DirectX SDK (August 2007)。
3、安装Dark GDK。
二、无法使用Wizards的解决办法
由于操作系统中“我的文档”的默认路径为C:\Documents and Settings\Administrator\My Documents,但是为了防止重装系统时数据丢失,很多人更改了“我的文档”的路径,比如我就改到了E:\我的文档,这样的话,在安装VS2008之后,会同时出现两个Visual Studio 2008的文件夹,路径分别为E:\我的文档\Visual Studio 2008和C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008。
当安装Dark GDK的时候,安装程序会在C:\Documents and Settings\Administrator\My Docum阅读全文>
发表于 @ 2009年03月28日 23:45:00|评论(loading...)|编辑|举报|收藏
2009年03月26日
关键字:非模态、模态、Hook、WH_CBT、CBTProc、
1、意图
有时候我们希望将非模态窗口显示为模态窗口。比如在IE的“文件”菜单下选择“打印”,弹出的“打印”对话框就是非模态的(也许我们不太清楚Microsoft的设计意图,一般来说这里的“打印”对话框应该是模态的)。这种情况下如何将“打印”对话框显示为模态的呢(这个对话框对我们来说是Black Box)?
2、简单实现
简单地说,模态窗口显示时,其父窗口是被Disable的,所以模态窗口才呈现“模态”,所以只要在显示我们非模态窗口前将父窗口Disable即可实现,如下:
……
AfxGetMainWnd()->EnableWindow(FALSE);//将主窗口Disable,显示出的非模态窗口就变成模态的了
ShowModelessWindow();
……
问题在于非模态窗口显示之后是立即返回的,那我们将父窗口Enable的代码放在哪里呢?笨办法是用时钟,不断地检测显示出来的非模态窗口阅读全文>
发表于 @ 2009年03月26日 16:55:00|评论(loading...)|编辑|举报|收藏
钩子能截获系统并得理发送给其它应用程序的消息,能完成一般程序无法完成的功能。掌握钩子的编程方法是很有必要的
钩子分类 :
1、WH_CALLWNDPROC和WH_CALLWNDPROCRET: 使你可以监视发送到窗口过程的消息
3、WH_DEBUG 调试钩子
4、WH_FOREGROUNDIDLE 当当应用程序的前台线程大概要变成空闲状态时,系统就会调用 WH_FOREGROUNDIDL
5、WH_JOURNALRECORD 监视和记录输入事件
6、WH_JOURNALPLAYBACK 回放用WH_JOURNALRECORD记录事件
7、WH_KEYBOARD 键盘钩子
9、WH_KEYBOARD_LL 低层键盘钩子
10、WH_MOUSE 鼠标钩子
11、WH_MOUSE_LL 底层鼠标钩子
12、WH_SHELL 外壳钩子
13、WH_MSGFILTER 和 WH_SYSMSGFILTER 使我们可以监视菜单,滚动条,消息框等 阅读全文>
发表于 @ 2009年03月26日 16:50:00|评论(loading...)|编辑|举报|收藏
2009年03月18日
在右键菜单第一项下面加入菜单项
[HKEY_CLASSES_ROOT\myprogfile\shell\myprogcmd]
@="myprog"
[HKEY_CLASSES_ROOT\myprogfile\shell\myprogcmd\command]
@="\"C:\\Program Files\\myprog\\myprog.exe\" \"%L\""
在右键菜单打开方式中加入菜单项
strRightMenuExt := 'Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\' + strExt + '\OpenWithProgids';
RegWriteBinaryValue(HKEY_CURRENT_USER, strRightMenuExt,
'myprogfile', '');阅读全文>
发表于 @ 2009年03月18日 17:00:00|评论(loading...)|编辑|举报|收藏
本文介绍用修改注册表的方法在右键菜单中添加清空文件夹命令。很多时候,你可能需要清空文件夹中的内容,但希望继续保留文件夹中原来的结构,如果逐一打开各个文件夹进行文件删除,确实比较麻烦。其实,我们可以在右键菜单中添加相关的命令,以后操作起来就方便多了。
打开注册表编辑器,依次定位到“HKEY_CLASSES_ROOT\Folder\shell”,右击选择“新建→项”,新建一个名为“清空文件夹内容”的子项,接下来右击该项,继续新建一个名为“command”的子项,选择“command”项,双击右侧窗格中的“(默认)”,修改默认的数据为“cmd /c "cd /d %1 && del /s /f /q *.*”,这里的“cmd /c”表示执行字符串指定的命令然后终止;“del”命令是用来删除一个或数个文件,“/s”是删除所有子目录中的指定文件,“/f”是强制删除只读文件,“/q”是所谓安静模式,删除时不要求进行确认。确认无误后关闭注册表编辑器。
现在,当我们在资源管理器中右击文件夹时,快捷菜单菜单中会弹出一个“清空文件夹内容”的选项,选择后即阅读全文>
发表于 @ 2009年03月18日 16:59:00|评论(loading...)|编辑|举报|收藏
作为开发人员总是要时不时使用命令行,为此用Win+R热键输入cmd的方式,然后在dos窗体通过
CD命令一步步转到命令所在目录,这系列操作多了就有点繁琐了,有没有简单的方式呢?
网上搜了一把,有在注册表加入几项即可的办法,方法如下:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\cmd]
@="进入DOS"
[HKEY_CLASSES_ROOT\Directory\shell\cmd\command]
@="cmd.exe /k \"cd %L\""
[HKEY_CLASSES_ROOT\Drive\shell\cmd]
@="进入DOS"
[HKEY_CLASSES_ROOT\Drive\shell\cmd\command]
@="cmd.exe /k \"cd %L\""
把以上保存为reg文件,然后导入注册表中即可,刚开始用的挺欢快阅读全文>
发表于 @ 2009年03月18日 16:54:00|评论(loading...)|编辑|举报|收藏
2009年02月27日
INNO SETUP卸载程序中加入自定义窗体(窗口)
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
[Files]
Source: Files\*; DestDir: {app}
[_Code]
const
bidDelAll = 1;
bidSkipAll = 2;
var
Form: TSetupForm;
CheckListBox: TNewCheckListBox;
AllButton, UnAllButton: TButton;
CancelButton, DelButton: TButton;
StaticText: TNewStaticText;
阅读全文>
发表于 @ 2009年02月27日 15:19:00|评论(loading...)|编辑|举报|收藏
2009年02月04日
要禁用工具带区和浏览器帮助对象功能,请执行以下操作: 关闭 Internet Explorer 的所有实例,单击开始,指向设置,然后单击控制面板。 双击 Internet 选项。 单击高级选项卡。 在浏览下,单击以清除“启用第三方浏览器扩展(需要重启动)”复选框。 重新启动 Internet Explorer。
这些步骤会将以下注册表项中的“Enable Browser Extensions”字符串值的数值数据更改为“No”: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
工具带区是随 Internet Explorer 5 引入的一个带区对象,用于支持电台工具栏功能。此功能可将窗口放在 Internet Explorer 中用于放置工具栏的 Rebar 控件所包含的带区上。有关工具带区的其他信息,请访问以下 Microsoft 网站: http://msdn.microsoft.com/library/en-us/shellcc/platform/Shell/programmer阅读全文>
发表于 @ 2009年02月04日 18:05:00|评论(loading...)|编辑|举报|收藏
2009年01月25日
//main.cpp
#include
#include
#include "teapots.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
if (!QGLFormat::hasOpenGL()) {
std::cerr
return 1;
}
Teapots teapots;
teapots.setWindowTitle(QObject::tr("Teapots"));
teapots.resize(400, 400);
teapots.show();
r阅读全文>
发表于 @ 2009年01月25日 21:47:00|评论(loading...)|编辑|举报|收藏
2009年01月24日
//main.cpp
#include
#include
#include "teapots.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
if (!QGLFormat::hasOpenGL()) {
std::cerr
return 1;
}
Teapots teapots;
teapots.setWindowTitle(QObject::tr("Teapots"));
teapots.resize(400, 400);
teapots.show();
r阅读全文>
发表于 @ 2009年01月24日 17:08:00|评论(loading...)|编辑|举报|收藏
2009年01月23日
下面我们学习OpenGL的视野与投影
视野(可视空间)就是视点能够看见的想象的空间的范围,我们创建的物体对象就在想象的空间之中,如果对象在视野之外,那就不能投影(映射)在屏幕上,也就看不见了。
视点的设置函数:gluLookAt。它的参数比较多,前三个参数表示了观察点的位置,中间三个参数表示了观察目标的位置,最后三个参数代表从(0,0,0)到 (x,y,z)的直线,它表示了观察者认为的“上”方向。从观察点的位置到观察目标的位置构成的方向就是视点所对的方向。
设置视野的函数有glFrustum、glOrtho和gluPerspective,glFrustum函数以透视投影的方式设置视野,glOrtho以正投影方式设置视野,gluPerspective和glFrustum效果相同,但函数参数不同。
透视投影有近大远小的效果,物体对象投影在屏幕上就如我们肉眼所见的那样,而正投影则没有这样的效果,无论对象离视点有多远,投影在屏幕上都是一样的大小。
视野由2个想象的矩形和它们的4个顶点的连线封闭而成,离视点近的是近矩形,离阅读全文>
发表于 @ 2009年01月23日 15:51:00|评论(loading...)|编辑|举报|收藏
2009年01月21日
现在我们学习在OpenGL场景中应用简单的光照
把类GLWidget的initializeGL函数实体改为下面的样子:
void GLWidget::initializeGL()
{
qglClearColor(trolltechPurple.dark());
object = makeObject();
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
static const GLfloat lightPos[4] = { 0.0f, 0.0f, 1.0f, 1.0f };
GLfloat lightAmbient[4] = { 0.5f, 0.5f, 0.5f, 0.5f };
GLfloat lightDiffuse[4] = { 1.0f, 1.0f, 阅读全文>
发表于 @ 2009年01月21日 23:37:00|评论(loading...)|编辑|举报|收藏
上一节(http://blog.csdn.net/itclock/archive/2009/01/21/3847222.aspx)我们学习了OPENGL 3D绘画的原理,并实现了一个球体,下面我们学习OPENGL 的3维坐标。
openGL使用右手坐标
从左到右,x递增
从下到上,y递增
从远到近,z递增
OPENGL坐标系可分为:世界坐标系和当前绘图坐标系。
世界坐标系以屏幕中心为原点(0, 0, 0)。你面对屏幕,你的右边是x正轴,上面是y正轴,屏幕指向你的为z正轴。长度单位这样来定: 窗口范围按此单位恰好是(-1,-1)到(1,1)。
当前绘图坐标系是 绘制物体时的坐标系。程序刚初始化时,世界坐标系和当前绘图坐标系是重合的。当用glTranslatef(),glScalef(), glRotatef()对当前绘图坐标系进行平移、伸缩、旋转变换之后, 世界坐标系和当前绘图坐标系不再重合。改变以后,再用glVertex3f()等绘图函数绘图时,都是在当前绘图坐标系进行绘图,所阅读全文>
发表于 @ 2009年01月21日 16:43:00|评论(loading...)|编辑|举报|收藏
3D绘图和2D绘图不同,2D绘图是根据X,Y坐标直接在屏幕上作图,而3D绘图是根据X,Y,Z三维坐标在立体空间创造物体,然后映射在屏幕上,在OPENGL及其他3D引擎中,我们只需要通过引擎提供给我们的函数在想象的空间创造物体,3D引擎自动为我们映射在屏幕上。阅读全文>
发表于 @ 2009年01月21日 10:44:00|评论(loading...)|编辑|举报|收藏