Aug
19
VC6_基于对话框MFC程序最基础教程示例~
by Sandy_zc_1
(说实话我觉得发这帖子很不像我的风格,倒是Felix经常给别人写示例。不过最近有学弟学妹们学习MFC啊,就借个地方把之前自己写的这些东西放上来给他们参考吧)
前段时间为了教几个学弟学妹们写的几个最基本的MFC简单例子,
只适合刚学过C,完全没有接触过VC6,想MFC入门的同志,稍微有点基础的就不要看了~~
共5个例子,每个中都有说明文件,按顺序看完跟着做完,自己再练一下基本就可以掌握了。
by Sandy_zc_1
(说实话我觉得发这帖子很不像我的风格,倒是Felix经常给别人写示例。不过最近有学弟学妹们学习MFC啊,就借个地方把之前自己写的这些东西放上来给他们参考吧)
前段时间为了教几个学弟学妹们写的几个最基本的MFC简单例子,
只适合刚学过C,完全没有接触过VC6,想MFC入门的同志,稍微有点基础的就不要看了~~
共5个例子,每个中都有说明文件,按顺序看完跟着做完,自己再练一下基本就可以掌握了。
Aug
19
因为Vista挂掉的原因使得我Wubi安装的Ubuntu 8.04 Hardy启动后只能引导到一个叫做什么Busybox的sh shell界面,没有读取root.disk,上网搜了一下,有一个解决办法是,打开grub的menu.lst,或者直接在grub界面按e进入修改模式,找到这一行:
kernel /boot/vmlinuz-2.6.24-21-generic root=UUID=2874D2DE74D2AE36 loop=/ubuntu/disks/root.disk ro quiet splash
删掉quiet splash, 换成irqpoll 回车,按下b键(boot)然后等两三分钟,终于进入了可爱的Ubuntu...
kernel /boot/vmlinuz-2.6.24-21-generic root=UUID=2874D2DE74D2AE36 loop=/ubuntu/disks/root.disk ro quiet splash
删掉quiet splash, 换成irqpoll 回车,按下b键(boot)然后等两三分钟,终于进入了可爱的Ubuntu...
Aug
17
已经移动到了我的GitHub上:
https://github.com/felix021/myenv/blob/master/.vimrc
=== 以下请忽略 ===
旧版本就不留了,一旦有最新的,我就直接覆盖了
--
@ 2010-12-22 设置dir参数,让.swp文件保存在同一个目录下(详情help directory)
@ 2010-08-18 合并win和linux版本; 重新映射j/k到gj/gk,在自动换行的时候可以上下走动(而不是一次走好几行)。
@ 2010-07-19 linux版增加<C-\>快捷键映射,支持(安装了CTAGS)在新tab中打开光标下的单词
@ 2010-06-08 windows版更新对python文件的基本设置
@ 2010-04-03 windows版更新 G++编译增加一个-D__DEBUG__参数,给<F12>添加的模板增加一个用于调试的宏dp,使用类似printf。
@ 2009-09-12 加入makefile的noexpandtab
@ 2009-05-13 修改CPPSET等函数,在运行的时候打开另一个gnome-terminal; 改用xelatex编译tex文档
@ 2009-04-11 开启modeline, 增加set encoding,能够对付多种编码了:)
@ 2009-04-02
实现的功能是,语法高亮,自动缩进(4格),显示行号,突出当前行,状态栏显示文件路径信息和光标所在行列
F3 显示当前错误
F4 跳转到第一个错误
F5 注释当前行/选中行
F6 取消注释当前行/选中行
F7 显示错误列表
F8 本来是映射到调试,但是发现没什么用,就干脆取消掉了
F9 编译(支持C/C++/Java/PHP/TeX), 对应PHP就是运行,TeX就是pdflatex编译
Ctrl+F9 运行(支持C/C++/Java/PHP/TeX), PHP就是运行,TeX就是evince打开查看
F12 插入C++模板
CTRL+T是:tabedit新建一个tab
普通模式,TAB是:tabnext,下一个tab, SHIFT+TAB是:tabprevious,上一个TAB
编辑模式下快速输入ppp,自动替换为 printf("光标位置");
编辑模式下快速输入sss,自动替换为 scanf("光标位置");
编辑模式下快速输入if(, while(, for(都会自动把后续的){}补全,然后光标停留在()中间
编辑模式下快速输入#inc,自动替换为 #include<[光标位置]>
在普通模式下输入 [,n] 为取消搜索高亮 [,a] 为全选 [Ctrl+C]为复制 [,p] 为粘贴
....
更多功能自己发掘:D
以下是.vimrc的内容:
https://github.com/felix021/myenv/blob/master/.vimrc
=== 以下请忽略 ===
旧版本就不留了,一旦有最新的,我就直接覆盖了
--
@ 2010-12-22 设置dir参数,让.swp文件保存在同一个目录下(详情help directory)
@ 2010-08-18 合并win和linux版本; 重新映射j/k到gj/gk,在自动换行的时候可以上下走动(而不是一次走好几行)。
@ 2010-07-19 linux版增加<C-\>快捷键映射,支持(安装了CTAGS)在新tab中打开光标下的单词
@ 2010-06-08 windows版更新对python文件的基本设置
@ 2010-04-03 windows版更新 G++编译增加一个-D__DEBUG__参数,给<F12>添加的模板增加一个用于调试的宏dp,使用类似printf。
@ 2009-09-12 加入makefile的noexpandtab
@ 2009-05-13 修改CPPSET等函数,在运行的时候打开另一个gnome-terminal; 改用xelatex编译tex文档
@ 2009-04-11 开启modeline, 增加set encoding,能够对付多种编码了:)
@ 2009-04-02
实现的功能是,语法高亮,自动缩进(4格),显示行号,突出当前行,状态栏显示文件路径信息和光标所在行列
F3 显示当前错误
F4 跳转到第一个错误
F5 注释当前行/选中行
F6 取消注释当前行/选中行
F7 显示错误列表
F8 本来是映射到调试,但是发现没什么用,就干脆取消掉了
F9 编译(支持C/C++/Java/PHP/TeX), 对应PHP就是运行,TeX就是pdflatex编译
Ctrl+F9 运行(支持C/C++/Java/PHP/TeX), PHP就是运行,TeX就是evince打开查看
F12 插入C++模板
CTRL+T是:tabedit新建一个tab
普通模式,TAB是:tabnext,下一个tab, SHIFT+TAB是:tabprevious,上一个TAB
编辑模式下快速输入ppp,自动替换为 printf("光标位置");
编辑模式下快速输入sss,自动替换为 scanf("光标位置");
编辑模式下快速输入if(, while(, for(都会自动把后续的){}补全,然后光标停留在()中间
编辑模式下快速输入#inc,自动替换为 #include<[光标位置]>
在普通模式下输入 [,n] 为取消搜索高亮 [,a] 为全选 [Ctrl+C]为复制 [,p] 为粘贴
....
更多功能自己发掘:D
以下是.vimrc的内容:
Aug
17
发现自己的Blog上居然没有一篇关于vim的日志,惭愧。。顺手转一篇吧。
最牛B的VIM配置见http://www.amix.dk/vim/vimrc.html ,不要照抄,不一定适合你,建议通读,学习如何配置。
以下内容转载自 http://bbs.linuxunion.net/showthread-t_463.html
vimrc 文件的配置
2007-01-22 21:57:49 / 个人分类:Linux C
/***************************************************************
*以下资料是从网上收集而来的,由于比较多,就没有注明转贴的地址了, *
*这里没有把VI 和 VIM 分开, 请不要跟不相关的贴. *
*http://vcd.gro.clinux.org/ 这里有很全的中文资料。
****************************************************************/
最牛B的VIM配置见http://www.amix.dk/vim/vimrc.html ,不要照抄,不一定适合你,建议通读,学习如何配置。
以下内容转载自 http://bbs.linuxunion.net/showthread-t_463.html
vimrc 文件的配置
2007-01-22 21:57:49 / 个人分类:Linux C
/***************************************************************
*以下资料是从网上收集而来的,由于比较多,就没有注明转贴的地址了, *
*这里没有把VI 和 VIM 分开, 请不要跟不相关的贴. *
*http://vcd.gro.clinux.org/ 这里有很全的中文资料。
****************************************************************/
Aug
16
@ 2009-05-25 其实早就发现了这个代码有严重的内存泄露问题,不过懒得改了。。。
------
实现重载了等于= 加法+ 减法- 矩阵乘法* 矩阵幂^(使用快速幂算法) 输出<< 输入>>,用起来会比较方便了,不过就是有点长。
查了好久快速幂算法,网上居然没有现成的,于是只好自己再推一遍,先贴出是整数的快速幂算法:
下面是矩阵类的代码:
------
实现重载了等于= 加法+ 减法- 矩阵乘法* 矩阵幂^(使用快速幂算法) 输出<< 输入>>,用起来会比较方便了,不过就是有点长。
查了好久快速幂算法,网上居然没有现成的,于是只好自己再推一遍,先贴出是整数的快速幂算法:
int Pow(int x, int y){
int ans, b, i;
if(y == 0)return 1;
if(y < 0) return -1;
for(i = y, b = 0; i > 0; i >>= 1) b++;
for(ans = 1, i = b - 1; i >= 0; i--){
if(y & (1 << i)){
ans = ans * ans * x;
}else{
ans = ans * ans;
}
}
return ans;
}
int ans, b, i;
if(y == 0)return 1;
if(y < 0) return -1;
for(i = y, b = 0; i > 0; i >>= 1) b++;
for(ans = 1, i = b - 1; i >= 0; i--){
if(y & (1 << i)){
ans = ans * ans * x;
}else{
ans = ans * ans;
}
}
return ans;
}
下面是矩阵类的代码:
#include<iostream>
#include<math.h>
using namespace std;
template <typename T>
class Matrix{
//class Matrix by felix021
//usage: Matrix<typename> varname(row, col[, mod]);
//如果typename不是short/int/long/long long
//那么取模运算需要包含math.h头文件(使用fmod函数)
//取模运算的代码仅在 + - * 三个函数内.
public:
T **data;
Matrix *temp;
int row, col, modnum;
//无参构造函数,没有给定矩阵的大小时,输出错误提示
Matrix(){
printf("Size parameter invalid!\n");
}
//构造函数, r是行数,c是列数,若给定m>0, 则在求和/差/积时对m取模
Matrix(int r, int c, int m = 0){
int i;
temp = NULL;
row = r, col = c;
data = new T *[r]; //分配一个 T *[r]类型的数组给data
for(i = 0; i < r; i++){
data[i] = new T [c]; //给data下的每个指针分配内存, 类型为 T [c]
}
if(m > 0) modnum = m;
else modnum = 0;
}
//析构函数,用于释放分配的内存
~Matrix(){
int i;
if(temp != NULL){delete temp; }
for(i = 0; i < row; i++) delete data[i];
delete data;
}
//赋值,给第i行第j列的元素赋值为 a
void assign(int i, int j, const T a){
if(i < 0 || i >= row || j < 0 || j >= col) {
printf("Invalid row/column number.\n");
return;
}else{
data[i][j] = a;
}
}
//取出元素,给第i行第j列的元素的值
T at(int i, int j){
if(i < 0 || i >= row || j < 0 || j >= col) {
printf("Invalid row/column number.\n");
return;
}else{
return data[i][j];
}
}
//重载<<运算符,可用cout输出
friend inline ostream & operator<<(ostream &os, const Matrix &a){
int i, j;
for(i = 0; i < a.row; i++){
for(j = 0; j < a.col - 1; j++){
os << a.data[i][j] << " ";
}
os << a.data[i][j];
os << endl;
}
return os;
}
//重载>>运算符,可用cin输入
friend inline istream & operator>>(istream &is, const Matrix &a){
int i, j;
for(i = 0; i < a.row; i++){
for(j = 0; j < a.col; j++){
is >> a.data[i][j];
}
}
return is;
}
//重载=运算符,要求两个矩阵的大小相同
Matrix & operator = (const Matrix &a){
int i, j;
if(row != a.row || col != a.col){
printf("Unmatch Matrix!\n");
return *this;
}
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
data[i][j] = a.data[i][j];
if(modnum > 0){
data[i][j] = mod(data[i][j]);
}
}
}
return *this;
}
//重载+运算符,要求两个矩阵的大小相同
Matrix & operator + (const Matrix &a){
int i, j;
if(row != a.row || col != a.col){
printf("Unmatch Matrix!\n");
return *this;
}
if(temp != NULL) delete temp;
temp = new Matrix(row, col, modnum);
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
temp->data[i][j] = data[i][j] + a.data[i][j];
if(modnum > 0){
temp->data[i][j] = mod(temp->data[i][j]);
}
}
}
return *temp;
}
//重载-运算符,要求两个矩阵的大小相同
Matrix & operator - (const Matrix &a){
int i, j;
if(row != a.row || col != a.col){
printf("Unmatch Matrix!\n");
return *this;
}
if(temp != NULL) delete temp;
temp = new Matrix(row, col, modnum);
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
temp->data[i][j] = data[i][j] - a.data[i][j];
if(modnum > 0){
temp->data[i][j] = mod(temp->data[i][j] + modnum);
}
}
}
return *temp;
}
//重载*运算符,要求矩阵a的列数等于b的行数
Matrix & operator * (const Matrix &a){
int i, j, k;
T tmp;
if(col != a.row){
printf("Unmatch Matrix!\n");
return *this;
}
if(temp != NULL) delete temp;
temp = new Matrix(row, a.col, modnum);
for(i = 0; i < row; i++){
for(j = 0; j < a.col; j++){
tmp = 0;
for(k = 0; k < a.row; k++){
tmp += data[i][k] * a.data[k][j];
if(modnum > 0){
tmp = mod(tmp);
}
}
temp->data[i][j] = tmp;
}
}
return *temp;
}
//重载^运算符,要求矩阵的列数等于行数
Matrix & operator ^ (const int a){
int i, j;
if(row != col){
printf("No n*n matrix!\n");
return *this;
}
if(a < 0){
printf("Invalid a(%d)!\n", a);
return *this;
}
if(temp != NULL) delete temp;
temp = new Matrix(row, col, modnum);
for(i = 0; i < row; i++){ //单位方阵
for(j = 0; j < col; j++){
if(i == j )temp->data[i][j] = 1;
else temp->data[i][j] = 0;
}
}
for(i = a, j = 0; i > 0; i >>= 1) j++;
for(i = j - 1; i >= 0; i--){
if(a & (1 << i)){
*temp = *temp * *temp * (*this);
}else{
*temp = *temp * *temp;
}
}
return *temp;
}
//重载求模函数,对int, long, long long, float, double都有效
int mod(int i){
return i % modnum;
}
long mod(long i){
return i % modnum;
}
long long mod(long long i){
return i % modnum;
}
float mod(float i){
return fmod(i, modnum);
}
double mod(double i){
return fmod(i, modnum);
}
};
int main(){
int i, j;
Matrix <int> t(2, 2), t1(2, 2), t2(2, 2), a(5, 10, 7), b(10, 5), c(5, 5);
cout << "(cin/cout test)\nPlease input 2 (2*2) Matrix: \n";
cin >> t;
cout << t << endl;
t1 = t * t * t * t * t;
t2 = t ^ 5;
cout << "t^5 = \n" << t1 << endl << t2 << endl;
getchar();
for(i = 0; i < 5; i++){
for(j = 0; j < 10; j++){
a.assign(i, j, 1);
b.assign(j, i, 2);
}
}
c = a * b;
cout << "Matrix a:" << endl << a << endl;
cout << "Matrix b:" << endl << b << endl;
cout << "Matrix a * b:" << endl << c << endl;
getchar();
return 0;
}
#include<math.h>
using namespace std;
template <typename T>
class Matrix{
//class Matrix by felix021
//usage: Matrix<typename> varname(row, col[, mod]);
//如果typename不是short/int/long/long long
//那么取模运算需要包含math.h头文件(使用fmod函数)
//取模运算的代码仅在 + - * 三个函数内.
public:
T **data;
Matrix *temp;
int row, col, modnum;
//无参构造函数,没有给定矩阵的大小时,输出错误提示
Matrix(){
printf("Size parameter invalid!\n");
}
//构造函数, r是行数,c是列数,若给定m>0, 则在求和/差/积时对m取模
Matrix(int r, int c, int m = 0){
int i;
temp = NULL;
row = r, col = c;
data = new T *[r]; //分配一个 T *[r]类型的数组给data
for(i = 0; i < r; i++){
data[i] = new T [c]; //给data下的每个指针分配内存, 类型为 T [c]
}
if(m > 0) modnum = m;
else modnum = 0;
}
//析构函数,用于释放分配的内存
~Matrix(){
int i;
if(temp != NULL){delete temp; }
for(i = 0; i < row; i++) delete data[i];
delete data;
}
//赋值,给第i行第j列的元素赋值为 a
void assign(int i, int j, const T a){
if(i < 0 || i >= row || j < 0 || j >= col) {
printf("Invalid row/column number.\n");
return;
}else{
data[i][j] = a;
}
}
//取出元素,给第i行第j列的元素的值
T at(int i, int j){
if(i < 0 || i >= row || j < 0 || j >= col) {
printf("Invalid row/column number.\n");
return;
}else{
return data[i][j];
}
}
//重载<<运算符,可用cout输出
friend inline ostream & operator<<(ostream &os, const Matrix &a){
int i, j;
for(i = 0; i < a.row; i++){
for(j = 0; j < a.col - 1; j++){
os << a.data[i][j] << " ";
}
os << a.data[i][j];
os << endl;
}
return os;
}
//重载>>运算符,可用cin输入
friend inline istream & operator>>(istream &is, const Matrix &a){
int i, j;
for(i = 0; i < a.row; i++){
for(j = 0; j < a.col; j++){
is >> a.data[i][j];
}
}
return is;
}
//重载=运算符,要求两个矩阵的大小相同
Matrix & operator = (const Matrix &a){
int i, j;
if(row != a.row || col != a.col){
printf("Unmatch Matrix!\n");
return *this;
}
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
data[i][j] = a.data[i][j];
if(modnum > 0){
data[i][j] = mod(data[i][j]);
}
}
}
return *this;
}
//重载+运算符,要求两个矩阵的大小相同
Matrix & operator + (const Matrix &a){
int i, j;
if(row != a.row || col != a.col){
printf("Unmatch Matrix!\n");
return *this;
}
if(temp != NULL) delete temp;
temp = new Matrix(row, col, modnum);
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
temp->data[i][j] = data[i][j] + a.data[i][j];
if(modnum > 0){
temp->data[i][j] = mod(temp->data[i][j]);
}
}
}
return *temp;
}
//重载-运算符,要求两个矩阵的大小相同
Matrix & operator - (const Matrix &a){
int i, j;
if(row != a.row || col != a.col){
printf("Unmatch Matrix!\n");
return *this;
}
if(temp != NULL) delete temp;
temp = new Matrix(row, col, modnum);
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
temp->data[i][j] = data[i][j] - a.data[i][j];
if(modnum > 0){
temp->data[i][j] = mod(temp->data[i][j] + modnum);
}
}
}
return *temp;
}
//重载*运算符,要求矩阵a的列数等于b的行数
Matrix & operator * (const Matrix &a){
int i, j, k;
T tmp;
if(col != a.row){
printf("Unmatch Matrix!\n");
return *this;
}
if(temp != NULL) delete temp;
temp = new Matrix(row, a.col, modnum);
for(i = 0; i < row; i++){
for(j = 0; j < a.col; j++){
tmp = 0;
for(k = 0; k < a.row; k++){
tmp += data[i][k] * a.data[k][j];
if(modnum > 0){
tmp = mod(tmp);
}
}
temp->data[i][j] = tmp;
}
}
return *temp;
}
//重载^运算符,要求矩阵的列数等于行数
Matrix & operator ^ (const int a){
int i, j;
if(row != col){
printf("No n*n matrix!\n");
return *this;
}
if(a < 0){
printf("Invalid a(%d)!\n", a);
return *this;
}
if(temp != NULL) delete temp;
temp = new Matrix(row, col, modnum);
for(i = 0; i < row; i++){ //单位方阵
for(j = 0; j < col; j++){
if(i == j )temp->data[i][j] = 1;
else temp->data[i][j] = 0;
}
}
for(i = a, j = 0; i > 0; i >>= 1) j++;
for(i = j - 1; i >= 0; i--){
if(a & (1 << i)){
*temp = *temp * *temp * (*this);
}else{
*temp = *temp * *temp;
}
}
return *temp;
}
//重载求模函数,对int, long, long long, float, double都有效
int mod(int i){
return i % modnum;
}
long mod(long i){
return i % modnum;
}
long long mod(long long i){
return i % modnum;
}
float mod(float i){
return fmod(i, modnum);
}
double mod(double i){
return fmod(i, modnum);
}
};
int main(){
int i, j;
Matrix <int> t(2, 2), t1(2, 2), t2(2, 2), a(5, 10, 7), b(10, 5), c(5, 5);
cout << "(cin/cout test)\nPlease input 2 (2*2) Matrix: \n";
cin >> t;
cout << t << endl;
t1 = t * t * t * t * t;
t2 = t ^ 5;
cout << "t^5 = \n" << t1 << endl << t2 << endl;
getchar();
for(i = 0; i < 5; i++){
for(j = 0; j < 10; j++){
a.assign(i, j, 1);
b.assign(j, i, 2);
}
}
c = a * b;
cout << "Matrix a:" << endl << a << endl;
cout << "Matrix b:" << endl << b << endl;
cout << "Matrix a * b:" << endl << c << endl;
getchar();
return 0;
}
Aug
15
花了点时间写了个web proxy for ftp, 也就是用php的扩展库,实现通过http的80端口来访问ftp服务器。这样做的动机是为了越过武大教育网对ftp端口的限制(也就是说以后我可以在外面通过http来访问武大的内网FTP了)。不过为了防止搜索引擎通过这个脚本抓取,所以即使是匿名可以登陆的服务器也需要先登陆后才能使用。当然,如果某人需要,简单修改一下这个脚本就能够突破这个限制。另外一个限制是可以下载的文件大小上限,因为具体的实现是通过服务器把ftp上的文件下载到本地,然后再发送给浏览器,如果可以任意下载大文件,那么服务器压力会很大,而且很容易失败。不过在必要的时候还是得下载一些大文件,所以另外设置了一个Privilege Password,这样就可以不受文件大小的限制了。因为时间关系只做了目录浏览和下载,没有做其他功能(重命名、上传、删除等)。等以后有时间了重写吧,得把那些东西写到一个Class里面去才行。不过其实有现成的ftp_class, 可以在phpWebFtp的包里面找到那个文件,我的一个关键函数就是从那个class里面提取出来的,而phpWebFtp是使用GPL2作为其分发协议的,所以我这个也用GPL2吧~
废话说多了,提供下载吧。
废话说多了,提供下载吧。
下载文件 (已下载 1193 次)