8.1.3 在Python扩展中使用MFC

news/2024/7/7 19:46:15

8.1.3 在Python扩展中使用MFC

作者: 孙广磊 出处:人民邮电出版社   (  ) 砖  (  ) 好  评论 ( ) 条   进入论坛
更新时间: 2007-10-16 14:15
关 键 词: Python   MFC   GUI   编程   函数   Windows   征服Python—语言基础与典型应用
阅读提示: 《征服Python—语言基础与典型应用》第八章主要讲的是Python扩展和嵌入,本节介绍了在Python扩展中使用MFC。

8.1.3  在Python扩展中使用MFC

在Windows下使用MFC可以方便地进行GUI编程。MFC对基本的SDK API函数进行了封装,使用更为简便。在PythonWin中提供了部分MFC中的函数。
Python扩展中使用MFC与上一节中的例子有不同的地方。此处给出一个在Python扩展中使用MFC创建一个对话框的例子。整个过程如下所示。

(1)单击【File】|【New】命令,弹出创建工程对话框。单击【Projects】标签,选择左侧列表中的【MFC AppWizard (dll)】项,在【Project name】文本框中输入工程名“UseMFC”,如图8-17所示。
(2) 单击【OK】按钮,弹出如图8-18所示的工程设置对话框。选中【Regular DLL using shared MFC DLL】单选框,使用动态链接方式。该方式需要MFC DLL的支持,如果选中【Regular DLL with MFC statically linked】单选框,则使用静态链接的方式,这样会增大生成的Python扩展的体积。

图8-17  创建工程对话框 
图8-18  设置工程类型对话框

(3)单击【Finish】按钮,弹出如图8-19所示的确认对话框。单击【OK】按钮完成工程创建。
(4)单击【Insert】|【Resource】命令,弹出添加资源对话框,选择左侧列表中的【Dialog】项,如图8-20所示。
 图8-19  工程信息确认对话框
图8-20  添加资源对话框

(5)单击【New】按钮将在工程中新建一个对话框。向对话框中添加Edit控件和Static Text控件,将其修改为如图8-21所示的形式。
(6)在创建的对话框上右击,选择【ClassWizard】命令,弹出如图8-22所示的添加类对话框。
图8-21  创建对话框 
 图8-22  为对话框添加类

(7)单击【OK】按钮为对话框添加一个新类,在弹出的添加类对话框中的【Name】文本框中将类命名为“CInput”,其余按照默认选项,如图8-23所示。
(8)右击创建的对话框,选择【ClassWizard】命令,弹出如图8-24所示的对话框。
(9)单击【Member Variables】标签,选中【IDC_EDIT1】项,单击【Add Variable】按钮,弹出如图8-25所示的对话框。
图8-23  输入类名
 图8-24  MFC类向导对话框

(10)在【Member variable name】文本框中输入“m_input”为控件IDC_EDIT1添加变量,即获取文本框中输入的字符串,如图8-26所示。单击【OK】按钮,完成添加变量。
图8-25  添加变量对话框

(11)打开UseMFC.cpp文件,将如下文件添加到其中。
    

#include "Input.h"
#include

然后将如下所示代码添加到UseMFC.cpp文件中。

PyObject *show(PyObject *self, PyObject *args)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CInput dia;
dia.DoModal();
return Py_BuildValue("s", dia.m_input);
}
static PyMethodDef UseMFCMethods[] =
{
{"show", show, METH_VARARGS,"show a messagebox"},
{NULL,NULL}
};
extern "C" void initUseMFC()
{
PyObject *mod;
mod = Py_InitModule("UseMFC",UseMFCMethods);
}


(12)打开UseMFC.def文件,将初始化函数添加到UseMFC.def文件中。def文件是用来告诉链接器DLL文件的导出函数的,相当于使用PyMODINIT_FUNC声明初始化函数。UseMFC.def文件内容如下所示。

    ; UseMFC.def : Declares the module parameters for the DLL.

LIBRARY      "UseMFC"
DESCRIPTION  'UseMFC Windows Dynamic Link Library'

EXPORTS
; Explicit exports can go here
initUseMFC


(13)按照8.1.1节中创建工程的第(6)~(10)步操作,完成 Python扩展的编译。
(14)编写如下所示的UseMFC.py,调用编译好的UseMFC模块。
    

# -*- coding:utf-8 -*-
# file: UseMFC.py
#
import UseMFC     # 导入UseMFC模块
input = UseMFC.show()   # 调用show函数
print '刚才输入的是:'
print input

(15)运行脚本后,在文本框中输入“Hi,Python and MFC!”,如图8-27所示。单击【OK】按钮后,如图8-28所示。

  图8-26  设置变量名  
  图8-27  脚本运行弹出对话框
图8-28  脚本获得文本框中的文本

【责任编辑: 杜书 TEL:(010)68476606】

回书目     

http://www.niftyadmin.cn/n/4820564.html

相关文章

Gradle之多渠道打包

多渠道打包 所谓多渠道打包,实际上是在代码层面上标记不同的渠道名,从而便于统计应用市场apk的下载量, 利用Gradle进行多渠道打包,开发者从之前的ant打包中解放出来,Gradle进行简单多了,只需要在Gradle脚…

QT实践

这两天工作搞了下QT,主要是为了实现一个功能,跨平台用的。功能是这样的,根据一个页面表单进行选择元素最后生成一个xml文件发送到手机上,因为之前实现了xmpp发送文件的作用,所以现在只需要根据文件生成一个xml文件。中…

[游戏]五子连珠

五子连珠是 一个同色相消类游戏。你可以移动小球, 使其从一个位置移动到另外一个位置,尽量使同一颜色的小球排成一横行、竖行或者斜行。只要在这些行上的小球达到5个或者多于5个,这些球就可以消去。直达 棋盘上没有空格放置小球时&#xff0c…

Python扩展方法及工具比较

http://zfqcn.blog.163.com/blog/static/2280681200711111311923/一、普通扩展方法 扩展Python包括三个步骤:1. 创建源程序(C, C, java, ...);2. 为源程序写wrap代码; 包括四个步骤:? include "Python.h";? 为每…

Activity的4种launchMode

launchMode介绍 launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里。这里简单介绍一下task的概念,task是一个具有…

Java 7.0 New Features

转自http://www.javabeat.net/javabeat/java7/index.php。此篇文章提供了Java 7.0的新的重要特性介绍。 Java 7.0也是自Java 5.0做重大改变(泛型和并发包)后的又一次重大变化。语言规范将进一步演化(C#演化的太快了)。尤其是闭包(Closures)的引入,使Java语言也能象C…

gitignore自动生成

gitignore文件是Git版本控制中的忽略文件,可以自行设置不用Git进行控制的文件。例如.class等 https://www.gitignore.io/这个网址可以帮助开发者快速生成推荐的gitignore文件。 Git 的 .gitignore 配置规则 .gitignore 配置文件用于配置不需要加入版本管理的文件…

昨晚在我那台古老台式机上装Fedora 10

最近整理家里,终于搬出我那台7,8年前买的那台台式机,配置如下:1.CPU 赛扬1G2.显卡 i810 (?)3.内存512M4.光驱CD5.显示器 红色无法显示(或许显卡坏了)6. Windows XP反正此机闲着没用,遂想装个Linux玩玩。因为是CD光驱和Fedora 10 DVD安装光盘…