通用菜单生成程序.net

时间:2022-05-08 13:08:50 其他范文 收藏本文 下载本文

通用菜单生成程序.net(共9篇)由网友“羊羊没有飞行器”投稿提供,下面小编为大家整理后的通用菜单生成程序.net,希望大家喜欢!

通用菜单生成程序.net

篇1:通用菜单生成程序.net

/*********** 主程序 ****************/ /*** cc menu.c -lcurses -omenu */ #include s td io.h #include curses.h #include ctype.h #define ENTER 10 #define ESCAPE 27 WINDOW *menubar,*messagebar,*temp,*temp1; char param[10][10][13]; void init_cu

/*********** 主程序 ****************/

/***clearcase/“ target=”_blank“ >ccmenu.c -lcurses -omenu      */

#include  tdio.h>

#include  

#include  

#define    ENTER 10

#define    ESCAPE 27

WINDOW *menubar,*messagebar,*temp,*temp1;

char param[10][10][13];

void init_curses

{

initscr();

start_color();

init_pair(1,COLOR_WHITE,COLOR_BLUE);

init_pair(2,COLOR_BLUE,COLOR_WHITE);

init_pair(3,COLOR_RED,COLOR_WHITE);

init_pair(4,COLOR_WHITE,COLOR_RED);

curs_set(0);

noecho();

keypad(stdscr,TRUE);

}

void GetSubStr(char *des, char *src, char ch,int n)

{

int  i,len;

char  *p1,*p, tmp[300];

strcpy( tmp, src );

*des=0;

p1 = tmp;

i=0;

while(i

{

i++;

p = (char *)strchr(p1,ch);

if(p != NULL)

{

*p++ = 0;

p1 = p;

}

}

p = (char *)strchr(p1,ch);

if(p != NULL)

{

*p = 0;

strcpy(des,p1);

}

}

int get_param(char *name)

{

FILE *fp;

char ss[201],xm[3],gs[3];

int i,j;

sprintf(ss,”%s.conf“,name);

if((fp=fopen(ss,”r“))==NULL) return(-1);

for(j=0;j<10;j++) for(i=0;i<10;i++) memset(param[j][i],0,13);

while(1)

{

memset(ss,0,201);

fgets(ss,200,fp);

if(feof(fp)) break;

if(ss[0]=='#') continue;

GetSubStr(xm,ss,'|',0);

GetSubStr(gs,ss,'|',1);

j=atoi(xm);

for(i=1;i<=atoi(gs);i++)

{

sprintf(param[j][0],”%s“,gs);

GetSubStr(param[j][i],ss,'|',i+1);

}

}

fclose(fp);

return(0);

}

void draw_menubar(WINDOW *menubar)

{

int i;

wbkgd(menubar,COLOR_PAIR(2));

for(i=0;i

{

wattron(menubar,COLOR_PAIR(3));

mvwprintw(menubar,0,i*14+2,”%1d.“,i+1);

wattroff(menubar,COLOR_PAIR(3));

mvwprintw(menubar,0,i*14+4,”%-12s“,param[0][i+1]);

}

}

WINDOW **draw_menu(int menu)

{

int i,start_col;

WINDOW **items;

items=(WINDOW **)malloc((atoi(param[menu][0])+1)*sizeof(WINDOW *));

start_col=(menu-1)*14+2;

items[0]=newwin(atoi(param[menu][0])+2,14,3,start_col);

wbkgd(items[0],COLOR_PAIR(2));

box(items[0],ACS_VLINE,ACS_HLINE);

for(i=1;i<=atoi(param[menu][0]);i++)

{

items[i]=subwin(items[0],1,12,3+i,start_col+1);

wprintw(items[i],”%s“,param[menu][i]);

}

wbkgd(items[1],COLOR_PAIR(4));

wrefresh(items[0]);

return items;

}

void delete_menu(WINDOW **items,int count)

{

int i;

for(i=0;i

free(items);

}

int scroll_menu(WINDOW **items,int menu)

{

int key,count,selected=0;

count=atoi(param[menu][0]);

while (1)

{

key=getch();

if (key==KEY_DOWN || key==KEY_UP)

{

wbkgd(items[selected+1],COLOR_PAIR(2));

wnoutrefresh(items[selected+1]);

if (key==KEY_DOWN)

selected=(selected+1) % count;

else

selected=(selected+count-1) % count;

wbkgd(items[selected+1],COLOR_PAIR(4));

wnoutrefresh(items[selected+1]);

doupdate();

}

else if (key==KEY_LEFT || key==KEY_RIGHT)

{

delete_menu(items,count+1);

touchwin(stdscr);

refresh();

if (key==KEY_LEFT)

{

menu-=1;

if(menu<=0) menu=atoi(param[0][0]);

items=draw_menu(menu);

return scroll_menu(items,menu);

}

if (key==KEY_RIGHT)

{

menu+=1;

if(menu>atoi(param[0][0])) menu=1;

items=draw_menu(menu);

return scroll_menu(items,menu);

}

}

else if (key==ESCAPE || key=='0' || key=='q')

{

delete_menu(items,count+1);

return -1;

}

else if (key==ENTER)

{

delete_menu(items,count+1);

return selected;

}

}

}

message(char *ss)

{

wbkgd(messagebar,COLOR_PAIR(2));

wattron(messagebar,COLOR_PAIR(3));

mvwprintw(messagebar,0,0,”%80s“,” “);

mvwprintw(messagebar,0,(80-strlen(ss))/2-1,”%s“,ss);

wattroff(messagebar,COLOR_PAIR(3));

wrefresh(messagebar);

}

int main(int argc,char **argv)

{

int key;

int selected_item;

char ss[81];

WINDOW **menu_items;

if(get_param(argv[0]))

{

printf(”n打开配置文件 %s.conf 错!n“,argv[0]);

return(-1);

}

init_curses();

bkgd(COLOR_PAIR(1));

menubar=subwin(stdscr,1,80,1,0);

messagebar=subwin(stdscr,1,80,24,0);

temp=subwin(stdscr,22,80,2,0);

temp1=subwin(stdscr,20,78,3,1);

strcpy(ss,”通用菜单生成程序“);

mvwprintw(stdscr,0,(80-strlen(ss))/2-1,”%s“,ss);

draw_menubar(menubar);

message(”请按数字键选择相应菜单. ESC 或'0'键退出.“);

box(temp,ACS_VLINE,ACS_HLINE);

refresh();

do {

key=getch();

if(isdigit(key)&&key>'0'&&key<=atoi(param[0][0])+'0')

{

werase(messagebar);

wrefresh(messagebar);

menu_items=draw_menu(key-'0');

selected_item=scroll_menu(menu_items,key-'0');

touchwin(stdscr);

refresh();

}

} while (key!=ESCAPE && key!='q' && key!='0');

delwin(temp1);

delwin(temp);

delwin(menubar);

delwin(messagebar);

endwin();

return(0);

}

菜单参数配置文件 menu.conf

#

#  格式为: 菜单号|项目个数|项目名称......

#      菜单数量最大为10个

#

0|6|菜单一|菜单二|菜单三|菜单四|菜单五|菜单六|

1|3|menu11|menu12|menu13|

2|8|menu21|menu22|menu23|menu24|menu25|menu26|menu27|menu28|

3|5|menu31|menu32|menu33|menu34|menu35|

4|4|menu41|menu42|menu43|menu44|

5|2|menu51|menu52|

6|1|menu61|

原文转自:www.ltesting.net

篇2:通用菜单生成程序Windows系统

功能还不是很完善,我正在改进中,这个小东东折腾了我好几天。:oops: [code:1:0c9ffa1d10] /***********主程序****************/ /***ccmenu.c-lcurses-omenu*/ #includestdio.h #includecurses.h #includectype.h #defineENTER10 #defineESCAPE27 WINDOW*me

功能还不是很完善,我正在改进中。这个小东东折腾了我好几天。 :oops:

[code:1:0c9ffa1d10]

/***********  主程序 ****************/

/***clearcase/” target=“_blank” >ccmenu.c -lcurses -omenu            */

#include

#include 

#include

#define ENTER 10

#define ESCAPE 27

WINDOW *menubar,*messagebar,*temp,*temp1;

char param[10][10][13];

void init_curses()

{

initscr();

start_color();

init_pair(1,COLOR_WHITE,COLOR_BLUE);

init_pair(2,COLOR_BLUE,COLOR_WHITE);

init_pair(3,COLOR_RED,COLOR_WHITE);

init_pair(4,COLOR_WHITE,COLOR_RED);

curs_set(0);

noecho();

keypad(stdscr,TRUE);

}

void GetSubStr(char *des, char *src, char ch,int n)

{

int i,len;

char *p1,*p, tmp[300];

strcpy( tmp, src );

*des=0;

p1 = tmp;

i=0;

while(i

{

i++;

p = (char *)strchr(p1,ch);

if(p != NULL)

{

*p++ = 0;

p1 = p;

}

}

p = (char *)strchr(p1,ch);

if(p != NULL)

{

*p = 0;

strcpy(des,p1);

}

}

int get_param(char *name)

{

FILE *fp;

char ss[201],xm[3],gs[3];

int i,j;

sprintf(ss,“%s.conf”,name);

if((fp=fopen(ss,“r”))==NULL) return(-1);

for(j=0;j<10;j++) for(i=0;i<10;i++) memset(param[j][i],0,13);

while(1)

{

memset(ss,0,201);

fgets(ss,200,fp);

if(feof(fp)) break;

if(ss[0]=='#') continue;

GetSubStr(xm,ss,'|',0);

GetSubStr(gs,ss,'|',1);

j=atoi(xm);

for(i=1;i<=atoi(gs);i++)

{

sprintf(param[j][0],“%s”,gs);

GetSubStr(param[j][i],ss,'|',i+1);

}

}

fclose(fp);

return(0);

}

void draw_menubar(WINDOW *menubar)

{

int i;

wbkgd(menubar,COLOR_PAIR(2));

for(i=0;i

{

wattron(menubar,COLOR_PAIR(3));

mvwprintw(menubar,0,i*14+2,“%1d.”,i+1);

wattroff(menubar,COLOR_PAIR(3));

mvwprintw(menubar,0,i*14+4,“%-12s”,param[0][i+1]);

}

}

WINDOW **draw_menu(int menu)

{

int i,start_col;

WINDOW **items;

items=(WINDOW **)malloc((atoi(param[menu][0])+1)*sizeof(WINDOW *));

start_col=(menu-1)*14+2;

items[0]=newwin(atoi(param[menu][0])+2,14,3,start_col);

wbkgd(items[0],COLOR_PAIR(2));

box(items[0],ACS_VLINE,ACS_HLINE);

for(i=1;i<=atoi(param[menu][0]);i++)

{

items[i]=subwin(items[0],1,12,3+i,start_col+1);

wprintw(items[i],“%s”,param[menu][i]);

}

wbkgd(items[1],COLOR_PAIR(4));

wrefresh(items[0]);

return items;

}

void delete_menu(WINDOW **items,int count)

{

int i;

for(i=0;i

free(items);

}

int scroll_menu(WINDOW **items,int menu)

{

int key,count,selected=0;

count=atoi(param[menu][0]);

while (1)

{

key=getch();

if (key==KEY_DOWN || key==KEY_UP)

{

wbkgd(items[selected+1],COLOR_PAIR(2));

wnoutrefresh(items[selected+1]);

if (key==KEY_DOWN)

selected=(selected+1) % count;

else

selected=(selected+count-1) % count;

wbkgd(items[selected+1],COLOR_PAIR(4));

wnoutrefresh(items[selected+1]);

doupdate();

}

else if (key==KEY_LEFT || key==KEY_RIGHT)

{

delete_menu(items,count+1);

touchwin(stdscr);

refresh();

if (key==KEY_LEFT)

{

menu-=1;

if(menu<=0) menu=atoi(param[0][0]);

items=draw_menu(menu);

return scroll_menu(items,menu);

}

if (key==KEY_RIGHT)

{

menu+=1;

if(menu>atoi(param[0][0])) menu=1;

items=draw_menu(menu);

return scroll_menu(items,menu);

}

}

else if (key==ESCAPE || key=='0' || key=='q')

{

delete_menu(items,count+1);

return -1;

}

else if (key==ENTER)

{

delete_menu(items,count+1);

return selected;

}

}

}

message(char *ss)

{

wbkgd(messagebar,COLOR_PAIR(2));

wattron(messagebar,COLOR_PAIR(3));

mvwprintw(messagebar,0,0,“%80s”,“ ”);

mvwprintw(messagebar,0,(80-strlen(ss))/2-1,“%s”,ss);

wattroff(messagebar,COLOR_PAIR(3));

wrefresh(messagebar);

}

int main(int argc,char **argv)

{

int key;

int selected_item;

char ss[81];

WINDOW **menu_items;

if(get_param(argv[0]))

{

printf(“n打开配置文件 %s.conf 错!n”,argv[0]);

return(-1);

}

init_curses();

bkgd(COLOR_PAIR(1));

menubar=subwin(stdscr,1,80,1,0);

messagebar=subwin(stdscr,1,80,24,0);

temp=subwin(stdscr,22,80,2,0);

temp1=subwin(stdscr,20,78,3,1);

strcpy(ss,“通用菜单生成程序”);

mvwprintw(stdscr,0,(80-strlen(ss))/2-1,“%s”,ss);

draw_menubar(menubar);

message(“请按数字键选择相应菜单. ESC 或'0'键退出.”);

box(temp,ACS_VLINE,ACS_HLINE);

refresh();

do {

key=getch();

if(isdigit(key)&&key>'0'&&key<=atoi(param[0][0])+'0')

{

werase(messagebar);

wrefresh(messagebar);

menu_items=draw_menu(key-'0');

selected_item=scroll_menu(menu_items,key-'0');

touchwin(stdscr);

refresh();

}

} while (key!=ESCAPE && key!='q' && key!='0');

delwin(temp1);

delwin(temp);

delwin(menubar);

delwin(messagebar);

endwin();

return(0);

}

[/code:1:0c9ffa1d10]

htldm 回复于:-10-11 08:54:55菜单参数配置文件 menu.conf

[code:1:26d743f75f]

#

#   格式为: 菜单号|项目个数|项目名称......

#           菜单数量最大为10个

#

0|6|菜单一|菜单二|菜单三|菜单四|菜单五|菜单六|

1|3|menu11|menu12|menu13|

2|8|menu21|menu22|menu23|menu24|menu25|menu26|menu27|menu28|

3|5|menu31|menu32|menu33|menu34|menu35|

4|4|menu41|menu42|menu43|menu44|

5|2|menu51|menu52|

6|1|menu61|

[/code:1:26d743f75f]

海德 回复于:2003-10-11 09:31:47:lol:

kofd 回复于:2003-10-11 09:48:35好东西,珍藏!

foolboy007 回复于:2003-10-11 10:01:07跟俺这的程序差不多

只不过 俺这的菜单配置程序是xml格式的

不知道有啥区别

tingya 回复于:2003-10-11 10:33:24比起我的功能差远了,

可以支持任意多层次的菜单,需要者请到

asp.6to23.com/vcprogram/resdown/resource/fmenu.zip下在,这是图书Linux下的Curses库开发指南>配套原程序.下在后请奖程序中所有的 f_winlabel.h该成f_menuhead.h进行便宜.

sdccf 回复于:2003-10-11 14:34:00错别字多多!

tingya 回复于:2003-10-12 12:25:55能看懂就行,你老兄一定是看懂了。:)

alanlql 回复于:2003-10-12 22:57:38楼上的朋友,我这好象不能下哦,hehe

li 回复于:2003-10-13 09:15:56确实下不了,下不了的东东就不要说了,浪费大家时间~~

kunrong 回复于:2003-10-13 09:34:55确实不错!谢谢楼主!我要好好的读一下!认真的学习一下!

阿徐 回复于:2003-10-13 11:56:11嗬嗬,很有用,但是还有一个问题,比方说,如果我要进入菜单后按enter,如何执行程序,或弹出另外一个子窗口,该如何实现,我也来修改

学习看看,把这个东东完善!!

tingya 回复于:2003-10-13 12:33:25asp.6to23.com/vcprogram/resdown/resource/fmenu.zip

阿徐 回复于:2003-10-13 13:03:35楼上的,还是不能呀,你这个东东阿保存为0字节,不能下

mrhxn 回复于:2003-10-13 13:59:06的确不行!贴一个上来!

kunrong 回复于:2003-10-13 15:28:43真的不能下哦。。。。。期待中。。。。。。

sdccf 回复于:2003-10-13 20:55:18unix-cd.com/softdown/show.asp?id=539

edit 回复于:2003-10-14 09:46:49有错

cc -g f_loadfield.c f_loadlabel.c f_otherfun.c xmlparse.c hashtable.c xmltok.c xmlrole.c f_drawform.c -lform -lcurses

f_loadfield.c:

“./f_menuhead.h”, line 137: error: identifier redeclared: F_MENU

f_loadlabel.c:

sdccf 回复于:2003-10-14 09:53:18请作者说一下在SCOUNIX下的编译方法.

htldm 回复于:2003-10-14 09:56:17这个程序确实还不是很完善,我也只是抛砖引玉,希望大家共同完善它

sdccf 回复于:2003-10-14 09:58:18我是说那个随书的源程序。

lzlcd 回复于:-05-12 09:45:09是个实用的好东东,我试用用看

lhk 回复于:-04-16 22:38:41[quote:4f1885edf3=“htldm”][/quote:4f1885edf3]

message()

不好用,不好用啊。反正我怎么试也没有看见帮助信息?

不知道怎么回事啊!

是一个问题,

怎么弄啊,告诉我啊

zhyesno 回复于:2005-04-18 08:58:20不错,编译了,挺漂亮的.

Thx。。。

myqueue 回复于:2005-04-26 15:34:32myqueue.net.dhis.org/mytui/index.php

也欢迎提宝贵意见

nirvana1125 回复于:2005-04-27 11:21:27编译完成。确实很漂亮。我正在想怎么能实用呢。多谢。多谢!

nirvana1125 回复于:2005-04-27 14:20:20希望大侠们能指明如何调用外部shell,或者4gl等可执行程序。

感激。

原文转自:www.ltesting.net

篇3:通过ini实现多语言菜单.net

下载本文的演示及源代码(26K) 263.csdn.net/FileBBS/files/_9/T_572_1.zip 从前看过vc知识库上一篇《实现多语言菜单》的文章,那篇文章里采用的方法是在资源里定义两个菜单,一个英文,一个中文... 要是程序要作成100国语言的用那种方法就十分不

下载本文的演示及源代码(26K)

263.csdn.net/FileBBS/files/2001_9/T_572_1.zip

从前看过vc知识库上一篇《实现多语言菜单》的文章。那篇文章里采用的方法是在资源里定义两个菜单,一个英文,一个中文...

要是程序要作成100国语言的用那种方法就十分不妥了。原因是软件作者不可能会100国语言....最主要的是那样十分不方便!

最好的办法就是把菜单存到ini文件里,由用户自行定义菜单(要改成什么就改成什么)。

下面111222尝试用ini储存菜单做了一个演示工程。实现了通过ini修改菜单项,通过这个你可以轻松的修改菜单的语言,内容,更主要的是你可以把这些工作交给热心的用户....当然,这只是简单的实现,还存在两个问题,希望你能够帮我完善它。

首先,要修改菜单项,你要熟悉CMenu的几个函数。

GetMenuItemCount;

//获取菜单项数目

GetMenuItemID(UNIT i);

//获取菜单项i的ID,这里ID为0代表分割线,-1为POPUP菜单项。

GetMenuString( UINT nIDItem, CString& rString, UINT nFlags );

//获取菜单项的字符串

ModifyMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );

//修改菜单项,这里我们主要是修改第4个参数,改变菜单的文字。

接下来我写了一个函数,利用递归遍历所有的菜单项按照ini文件的设置修改菜单项:

//函数声明 MainFrm.h

void InitMenu(CMenu* menu);

/////////////////////////////////////////////////

//功能:多语言菜单 MainFrm.cpp

//原理:遍历菜单项,替换菜单项文字为ini文件中的对应值

//// by 111222 9月13日

/////////////////////////////////////////////////

void CMainFrame.:InitMenu(CMenu* menu)

{

if(menu==NULL)

return;

int nCount = menu->GetMenuItemCount();//获取该层菜单数

for(int i=0;i

{

int id = menu->GetMenuItemID(i);//查看菜单属性,id=0为分割线,-1为popup菜单

if(id==0)

{}

else if(id==-1)

{

CString strText;

menu->GetMenuString (i, strText, MF_BYPOSITION);//获取菜单文字

CString cs = AfxGetApp()->GetProfileString(“menu”,strText,strText);//读取菜单项在ini里的文字

menu->ModifyMenu(i,MF_STRING|MF_BYPOSITION,id,cs);

//   下面这行可有可无,用这个免得我们手工编辑ini,发布的版本里注释掉

AfxGetApp()->WriteProfileString(“menu”,strText,cs);

CMenu* pSub = menu->GetSubMenu(i);

InitMenu(pSub);//递归,遍历popup菜单

}

else

{

CString strText;

menu->GetMenuString (i, strText, MF_BYPOSITION);

CString cs = AfxGetApp()->GetProfileString(“menu”,strText,strText);

menu->ModifyMenu(i,MF_STRING|MF_BYPOSITION,id,cs);

//   下面这行可有可无,用这个免得我们手工编辑ini,发布的版本里注释掉

AfxGetApp()->WriteProfileString(“menu”,strText,cs);

}

}

}

函数的调用:

在CMainFrame.:OnCreate的中填加上

//multi language menu

CMenu* pMenu = GetMenu();

InitMenu(pMenu);

至此通过ini实现多语言菜单结束了,

具体可以看演示程序。

menu.ini中储存着每个菜单项的文字,你只需要修改值就可以改换菜单语言。

上面程序的不足:

没能修改Prompt的文字(就是在状态栏上显示的提示)

没能显示快捷键(菜单的为newtCtrl N的话将不正常)

这两个不足我还没有着手解决,希望能解决的也给我些提示   111222@0451.com

原文转自:www.ltesting.net

篇4:网站程序/OA/.NET/ASP

网站程序/OA/.NET/ASP

个人基本简历 
简历编号: 更新日期:-12-11 
姓 名: 国籍:中国
目前所在地:广州民族:汉族
户口所在地:广州身材:171 cm?60 kg
婚姻状况:未婚年龄:25 岁
培训认证: 诚信徽章:  
求职意向及工作经历
人才类型:普通求职?
应聘职位:计算机类:、市场销售/营销类:夜班/装修/批发等、建筑/房地产/物业管理类:夜班/工业地产
工作年限:3职称:初级
求职类型:均可可到职日期:随时
月薪要求:--3500希望工作地区:广州 深圳 海南
个人工作经历:
公司名称:艾尔富(广州)科技有限公司起止年月:-02 ~
公司性质:外商独资所属行业:计算机业
担任职务:技术支持 
工作描述:软件界面

公司网站

电子商务 

离职原因:公司要发展,但是个人同样要发展。 
 
公司名称:广州麦网网络科技有限公司起止年月:-09 ~ 2008-01
公司性质:私营企业所属行业:
担任职务:网站程序员 
工作描述:www.mallbao.com 再开发 
离职原因:完成任务 
 
公司名称:深圳弘缘企业形象设计有限公司起止年月:2007-02 ~ 2007-08
公司性质:私营企业所属行业:计算机业
担任职务:网站程序员 
工作描述:主要以接单为主,做企业网站.

我负责:除美工画图外所有事情.

做过的网站可以在:www.szhych.com/view.asp 看到

(熟悉网站开发流程) 

离职原因:故意拖欠工资 
 
公司名称:广州麦网网络科技有限公司起止年月:-02 ~ 2007-01
公司性质:私营企业所属行业:计算机业
担任职务:网站程序员 
工作描述:主要负责维护公司两个网站(www.mallbao.com; www.icooler.cn/)和对网站的`新功能的开发 
离职原因:自愿离开,算我亏欠公司。毕竟是第一家公司 
 
教育背景
毕业院校:广东海洋大学
最高学历:大专毕业日期:2006-06-01
所学专业一:计算机网络技术所学专业二: 
受教育培训经历:
起始年月终止年月学校(机构)专 业获得证书证书编号
-092006-06广东海洋大学计算机网络技术大学毕业证
-072005-07湛江市安全生产监督管理局特种作业电工证(初级)
2005-092005-09人事部和信息产业部计算机技术计算机技术与软件专业技术资格(水平)证书(网络管理员级别)
2006-062006-06全国信息技术应用培训教育工程计算机ITAT(网页设计与制作类)www.itat.com.cn可查询
 
语言能力
外语:英语 一般  
国语水平:优秀粤语水平:精通
 
工作能力及其他专长
 熟练:PS、Dreamweaver、VS2005、ASP.NET2.0(C#)、JavaScript、CSS+Div、ASP、AJAX、Access  MS SQL server、WebService、Jquery、json

熟悉网站架构.熟悉网站开发全过程.

客户案例(越下面越新)[以证实案例真实性。可以随便抽查,我都有原文件。]

[清注意:图片是美工画的,本人不做美工的版面画图!copy网站除外]

www.szhyzx.com/

www.jy6688.com/

www.szbyt.com.cn/

www.guanyue-cn.com/

www.keystee.com/

www.minyota.com/

www.runfair.com.cn/

www.kammi-china.com/

www.srlled.com/

www.bitway-sz.com/

www.songtian.net/

www.ameisy.com/

www.360-in.com/

www.sabrinascala.com/

支付型(PayPal支付)20080911

ccie4sure.com

ccieinside.com

labworkbooks.com/

passccielab.com

realccielab.com

www.xmxxu.com

www.lenoge.com/(应用了自己开发的diys+jquery)

www.tera-power.com(应用了自己开发的diys+jquery)

另外有多年年花年桔销售经验.

**(根据几年网站开发经验,专门针对开发过程中所遇到的问题)最新个人开发:DIYS(后台快速布局,大大节省代码量和开发时间)**

例如新闻系统,会员系统,包括分类的管理,只需几行代码即可完成!

网站批量生产业务尤为有用!

已开发版本:ASP.NET(C#2.0)_MsSql_v1[MsSql:2000]

(8月31日)ASP.NET(C#2.0)_MySql_v1[MySql:mysql-essential-5.0.84]

(8月5日)最新支持多分类参数,支持会员密码客户端/服务器端加密

(8月31日)最新支持MySql,也就是,既可以用MsSql,也可以用MySql

 
详细个人自传
 如果工作是 技术+业务(有提成的工作!) 性质的更好.

前端开发比后台开发更有意思。

主推:ASP.NET(C#)2.0/ASP + SQL server2k/Access + jQuery开发

个人比较喜欢软件开发

3年程序经验

只要拿来版面设计图就能完成整个网站。

[清注意:本人不做美工的整个网站的版面设计!但copy网站/部分图片PS依然可以做]

 
个人联系方式
通讯地址:
联系电话: 家庭电话: 
手 机: QQ号码:
电子邮件: 个人主页:

篇5:如何合并多个 .NET 程序集

这篇文章主要介绍了如何合并多个 .NET 程序集的方法,大家可能都听说过项 ILMerge, SmartAssembly, 等这样的工具.但是我想如果我们就能通过在编译时将所有这些源代码文件导入一个项目,来获得这些东西的一个完美组合.下面我们就来仔细探讨下,

任何曾今寻找过一个将多个程序合并到一个文件中的解决方案的人,可能都听说过项 ILMerge, SmartAssembly, 等这样的工具.

另外一个知名的方案是将DLL作为资源进行嵌入(如果感兴趣,这里有一篇描述这一方案的精彩文章:从嵌入的资源出载入DLL[^]).

而在某些情况中,我意识到有必要使用这些方法.如果我们有了这些汇编的源代码,我们就能通过在编译时将所有这些源代码文件导入一个项目,来获得这些东西的一个完美组合.

在这里我将尝试对如何做到这件事进行简要的描述.

为了进行演示,让我们假设我们有一个控制台应用程序 (这是我们的主程序) ,引用并且使用了两个类库 (我们的二级程序),而我们想把它们组合成一个文件:

我们按照设想构建了这个解决方案,获取了这三个程序:

注意 MyExecutable 的项目文件 (MyExecutable.csproj)是一个基于XML的文件,而如果我们查看它的内容,会发现一些ItemGroup节点. 这些节点博阿含定义了构建过程输入的子元素. 这些子元素可以引用需要被编译的应用程序的资源文件, 或者是一些需要被复制的资源,以及需要在构建处理中被包含进去的程序集 (如果对此感兴趣,你可以在MSDN MSBuild上了解到更多有关Visual Studio项目文件的信息).

现在让我们定位到 ItemGroup 节点,里面引用了要被包含进来的程序集:

{ea53ca82-13d7-4be1-b95a-4d9d7853d46e}

MyLibrary1

{c31d21f3-e86a-4581-b4e8-acae6644d19e}

MyLibrary2

这里,我们将添加一个条件,指示在Debug模式中构建 MyExecutable 时要到MSBuild那里去使用这些项目引用:

而对于发布(Release)模式,我们将来自 MyLibrary1 和 MyLibrary2 的所有源代码文件都包含进来,也进行编译. 我们会利用一个通配符文(“***.cs”)将目录及其子目录汇总所有的CS文件都包含进来. 通配符文也会将一些我们不想要的资源代码文件包含进来(obj文件夹中的TemporaryGeneratedFile_[guid].cs 以及Property文件夹中的AssemblyInfo.cs文件就是这种情况) 因此我们将对它们进行排除:

Exclude=“..MyLibrary1PropertiesAssemblyInfo.cs;

..MyLibrary1obj**;

..MyLibrary1bin**”>

MyLibrary1%(RecursiveDir)%(Filename)%(Extension)

false

Exclude=“..MyLibrary2PropertiesAssemblyInfo.cs;

..MyLibrary2obj**;

..MyLibrary2bin**”>

MyLibrary2%(RecursiveDir)%(Filename)%(Extension)

false

这样就可以了,让我们保存 MyExecutable.csproj 中的修改,并在发布模式中对解决方案进行重新构建:

我想要强调的最后一件事情就是,因为我们是在形式上将所有的程序集源文件的编译移到一个项目中, 项目需要能够编译那些文件才行. 因此你需要考虑下面这些事情:

为了能构建成功,主程序需要有二级程序所有的引用,资源,设置等等.

所有的程序集都需要用同一种 .NET 语言编写.

以上就是本文所述的全部内容了,希望大家能够喜欢,

篇6:优化你的PowerBuilder程序.net

一、处理 SQL 语句 1、缓冲 SQL 语句 在应用程序中,有时需要反复调用同一组 SQL语句,在这种情况下,可以通过在应用中为这些 SQL 建立缓冲区来提高执行 性能 ,在缺省情况下,SQL 语句的缓冲区是关闭的,你可以通过如下语句打开它: SQLCACHE = n n 表示装

一、处理 SQL 语句

1、缓冲 SQL 语句

在应用程序中,有时需要反复调用同一组 SQL语句,在这种情况下,可以通过在应用中为这些 SQL 建立缓冲区来提高执行性能。在缺省情况下,SQL 语句的缓冲区是关闭的,你可以通过如下语句打开它:

SQLCACHE = n

n 表示装入缓冲区的 SQL 语句数量(缺省为0)

例如:

dw_1.SetTransObject(sqlca)

SQLCA.dbParm = “SQLCache = 0”

dw_1.retrieve

如果将上例的 “SQLCache = 0” 改为 “SQLCache = 25”,此句的执行效率将提高五分之一左右。但应注意缓冲区的大小,否则也将影响程序执行的性能。

注:此方法对用 ODBC 和 ORACLE 连接的数据库非常有效。

2、捆绑变量

请看下例:

SQLCA.DBPARM = “DISABLEBIND=1”

INSERT INTO DA_DH VALUES(“1”,“河南0”)

INSERT INTO DA_DH VALUES(“2”,“河南1”)

INSERT INTO DA_DH VALUES(“3”,“河南2”)

INSERT INTO DA_DH VALUES(“4”,“河南3”)

INSERT INTO DA_DH VALUES(“5”,“河南4”)

INSERT INTO DA_DH VALUES(“6”,“河南5”)

这里未使用捆绑变量,在插入是 PB 将重新处理每个带有新值的SQL语句。

如果将上例改为:

SQLCA.DBPARM = “DISABLEBIND=0”

INSERT INTO DA_DH VALUES(“1”,“河南0”)

INSERT INTO DA_DH VALUES(“2”,“河南1”)

INSERT INTO DA_DH VALUES(“3”,“河南2”)

INSERT INTO DA_DH VALUES(“4”,“河南3”)

INSERT INTO DA_DH VALUES(“5”,“河南4”)

INSERT INTO DA_DH VALUES(“6”,“河南5”)

则系统将把 INSERT 语句按如下格式进行处理:   INSERT INTO DA_DH VALUES(?,?)

其中 “?” 称为占位符。系统性能将有所增强。

3、用数据窗口代替 SQL 语句

通常,为了获得某些数据,采用数据窗口和 SQL 语句都是可行的,但是PB 对数据窗口和 SQL 语句采用不同的处理机制,因此,具有不同的效率。

例:为里检索电话档案中的用户名,可以利用 SQL 语句,将所有的数据检索到一个多行编辑中,也可以检索到一个数据窗口中。

如果使用第一中方法:首先定义一个游标:

DECLARE CUR CURSOR FOR

SELECT “DA_DH”.“HM”

FROM “DA_DH”;

然后可以:

STRING stxt[],st

int li

open cur

do li = li + 1

fetch cur

into :stxt[li] ;

st=st+stxt[li] + “~r~n”

loop while stxt[li]“”

close cur;

mle_1.txt = st

也可以使用第二种方法:

dw_1.settransobject(sqlca)

dw_1.retrieve()

利用 POWERBUILDER PROFILER 工具进行检查,对比两种方法所需时间如下

方法                     所需时间 (百分之一秒)

SQL 语句   100.9857

数据窗口                49.0133

由于数据窗口或 DATASTORE 使用了标准的内嵌的代码,而不是有开发人员进行全部编码,同时编译执行的速度比解释执行的速度快的多,因此在开发过程中应尽量使用数据窗口和DATASTORE..即使是必须用 SQL 语句的时候,也应该尽量将它们定义为存储过程(特别是在多用户的环境中),以提高应用程序的性能.

二、数据窗口的编程和执行

数据窗口是PB最值得被称道的, 其具有如下特点:

1. 多种显示方式.

2. 多种编辑方式.

3. 使用方法简单.

4. 具有多种报表形式.

5. 可实现屏幕滚动.

6. 可实现数据的有效性校验.

7. 执行性能显著提高.

8. 编程工作变少.

9. 可以在数据窗口内部实现数据哭的更新.

下面, 我将介绍一些用于提高数据窗口性能的技术.

1. 减少连接数据库的次数

连库操作是非常影响执行速度的操作. 因此在程序中,一旦与数据库连接后就应当尽量保持与数据库的连接, 减少连接数据库的次数.PowerBuilder 提供里两个函数来建立数据窗口与事务对象的连接:

SetTrans()

SetTransObject()

在程序中应当尽量使用 SETTRANSOBJECT(), 因为SETTRANS() 函数在每次调用 RETRIEVE(), UPDATE() 等函数之后, 都要执行数据库的连接和断开操作.

2. 下拉数据窗口与表的连接

对于数据库服务器来说, 表的连接操作是一项非常大的开销, 而 POWERBUILDER 提供的下拉数据窗口在某些情况下可以代替表的连接操作.例如, 为了在数据窗口上显示用户的电话号码和姓名:如果用表的连接的方法, 数据窗口对应的 SQL 语句应是这样的:

SELECT “DA_DH”.“DHHM”,

“DA_HTH”.“DWM”

FROM “DA_HTH”,

“DA_DH”

WHERE (“DA_HTH”.“DHHM”=“DA_DH”.“DHHM”)

同样的程序可用下拉数据窗口来完成, 这里不再具体介绍.但是, 应当注意, 以上两种方法究竟哪一种数据更快, 与表的结构, 表的数量, 连接的方法等均有关系, 应当具体分析.

3. 共享数据

在一个应用程序中, 某些数据需要频繁的使用, 如果在每次使用时都从数据库中进行检索, 则需占用大量的服务器资源和网络资源. 为了减少开销, 可以在客户端对这些数据只进行一次检索, 然后允许其它任务共享这些数据.

例如, 如果有两个数据窗口, 都需要从第三方表中检索出用户的电话号码, 且此列用下拉数据窗口给出. 如果每次都对电话号码进行检索, 则性能较低. 因此, 可以单独建立一个关于电话号码的数据窗口. 在每次打开窗口时, 首先将电话号码检索到此数据窗口中, 然后另外两个数据窗口中关于电话号码的下拉数据窗口可以共享此数据窗口中的数据.

在窗口的 OPEN 事件中编写如下程序:

dw_1.settransobject(sqlca)

dw_2.settransobject(sqlca)

dw_3.settransobject(sqlca)

// 检索 dw_1

dw_1.retrieve()

// 使 DW_2 的下拉数据窗口共享 DW_1

datawindowchild child1

dw_2.getchild('dhhm',child1)

child1.settransobject(sqlca)

dw_1.sharedata(child1)

// 使 DW_2 的下拉数据窗口共享 DW_1

datawindowchild child2

dw_3.getchild('dhhm',child2)

child2.settransobject(sqlca)

dw_1.sharedata(child1)

使用这种方法, 避免了各个数据窗口间物理的拷贝数据, 因此减少了空间上的开销,提高了应用程序的综合性能.

4. 数据窗口间数据的拷贝

如果需要在数据窗口间共享数据, 应当尽量使用 SHAREDATA() 函数, 但是, SHAREDATA() 函数并不是物理地在数据窗口间拷贝数据, 如工在显示数据的同时, 还要对数据进行操作, 则需要进行数据的拷贝.

例如, 要求将 DW_1 中选定的行拷贝到 DW_2 中:

在窗口的 OPEN 事件中编程:

dw_1.settransobject(sqlca)

dw_2.settransobject(sqlca)

dw_1.retrieve()

在数据窗口 DW_1 的 ROWFOCUSCHANGED 事件中编写下列程序:

long lr

lr = dw_1.selectrow(0,false)

lr = dw_1.getrow()

lr = dw_1.selectrow(lr,true)

要完成从 DW_1 到 DW_2 的拷贝工作, 有两种方法:

第一种:  在按钮 “拷贝” 的 CLICKED 事件中编程

long lr

lr = dw_1.getselectedrow(0)

dw_1.rowscopy(lr,lr,primary!,dw_2,100,primary!)

执行程序, 利用 POWERBUILDER PROFILER 得出所需时间为 1.7034(百分之一秒)

第二种:

在按钮 “拷贝” 的 CLICKED 事件中编程

dw_2.object.data = da_1.object.data.selected

执行程序, 利用 POWERBUILDER PROFILER 得出所需时间为 0.8062(百分之一秒)

共2页: 1 [2] 下一页

原文转自:www.ltesting.net

篇7:Windows 窗体之创建动态上下文菜单.net

以下演练显示如何更改每个控件的菜单项 创建应用程序 以下步骤将创建一个 Windows 应用程序,它具有包含两个控件的窗体,在运行时,如果右击每个控件(只要它具有焦点,即被选定),将显示相应的上下文菜单。RadioButton 控件的上下文菜单将包含两个项;Chec

以下演练显示如何更改每个控件的菜单项

创建应用程序

以下步骤将创建一个 Windows 应用程序,它具有包含两个控件的窗体。在运行时,如果右击每个控件(只要它具有焦点,即被选定),将显示相应的上下文菜单。RadioButton 控件的上下文菜单将包含两个项;CheckBox 控件的上下文菜单将包含三个项。

在 Windows 窗体上创建动态上下文菜单

1.创建新的 Windows 应用程序。

2.将一个“复选框”(CheckBox) 控件和一个“RadioButton”控件从“工具箱”拖到窗体上。

虽然任何两个(或更多个)控件都可以共享一个上下文菜单,但使具有类似命令的控件共享上下文菜单也是有好处的,因为这样可以减少必需动态显示及隐藏的量。

3.双击“工具箱”中的“ContextMenu”组件,将其添加到窗体中。它将成为共享的上下文菜单。

4.在“属性”窗口中,将 CheckBox 控件和 RadioButton 控件的 ContextMenu 属性设置为 ContextMenu1(在 C# 中为 contextMenu1)。

5.在“属性”窗口中,将 CheckBox 控件的 ThreeState 属性设置为 true。

6.从设计器中双击 ContextMenu 组件,为该组件的 Popup 事件创建默认的处理程序。在事件处理程序中插入执行以下任务的代码:

・添加两个菜单项,一个表示控件的 Checked 状态,另一个表示 Unchecked 状态。

・用 If 语句检验 CheckBox 控件是否为窗体上的 SourceControl。根据检验结果,动态地添加第三个菜单项,该菜单项表示控件的 Indeterminate 状态。

以下示例显示如何使用 Add 方法来设置菜单项的 Text 属性以及如何定义与该菜单项相关联的事件处理程序。

private void contextMenu1_Popup(object sender, System.EventArgs e)

{ contextMenu1.MenuItems.Clear;

contextMenu1.MenuItems.Add(“Checked”,new System.EventHandler(this.Checked_OnClick));

contextMenu1.MenuItems.Add(“Unchecked”,new System.EventHandler(this.Unchecked_OnClick));

if (contextMenu1.SourceControl == checkBox1)

{

this.contextMenu1.MenuItems.Add(“Indeterminate”, new System.EventHandler(this.Indeterminate_OnClick));

} }

为 MenuItem1 创建一个事件处理程序,

添加如下代码,检验窗体的 SourceControl 属性,然后根据检验结果设置 RadioButton 或 CheckBox 控件的 Checked 属性:

protected void Checked_OnClick(System.Object sender, System.EventArgs e)

{ if (contextMenu1.SourceControl == radioButton1)

radioButton1.Checked = true;

else if (contextMenu1.SourceControl == checkBox1)

checkBox1.Checked = true;

}

注意:此示例在 Indeterminate_OnClick 事件处理程序中使用 CheckState 属性将 CheckBox 控件设置为Indeterminate。

为 MenuItem2 创建类似的事件处理程序。为该事件处理程序输入如下代码:

protected void Unchecked_OnClick(System.Object sender, System.EventArgs e)

{ if (contextMenu1.SourceControl == radioButton1)

radioButton1.Checked = false;

else if (contextMenu1.SourceControl == checkBox1)

checkBox1.Checked = false;

}

为 MenuItem3 创建类似的事件处理程序。为该事件处理程序输入如下代码,确保将事件命名为 Indeterminate_OnClick:

protected void Indeterminate_OnClick(System.Object sender, System.EventArgs e)

{ if(contextMenu1.SourceControl == checkBox1)

checkBox1.CheckState = System.Windows.Forms.CheckState.Indeterminate;

}

原文转自:www.ltesting.net

篇8:Windows API 程序的组织结构.net

前言: 现在Windows程序可以说是盛极一时了,有很多人也在从事着Windows编程,那么,Windows程序的结构到底是什么样的呢?很多初学者对此都很迷惑。今天笔者就Windows程序的动态组织结构进行一次探讨,希望对部分初学者有所帮助! 正文: 在介绍Windows程序

前言:

现在Windows程序可以说是盛极一时了,有很多人也在从事着Windows编程。那么,Windows程序的结构到底是什么样的呢?很多初学者对此都很迷惑。今天笔者就Windows 程序的动态组织结构进行一次探讨,希望对部分初学者有所帮助!

正文:

在介绍Windows 程序的基本构架之前我们必需先了什么是消息。

在Windows 多任务环境下同时会有许多程序交织着进行这样复杂的工作是如何管理的呢? Windows 凭借的就是“消息传送(MessagePassing)”这个法宝!在Windows 下所有外部输入如按键、鼠标、按钮、移动计时等动作都是由系统先拦截转换成消息(Message)之后再传给各个程序,

Windows 拦截输入的目的之一是为了将不同外设输入的数据转换成一致的格式以方便程序处理这个一致的格式就是消息(Message)。

消息是一个结构它的组成如下:

typedef struct tagMSG{

HWND hWnd;  所欲送达的窗口代码(handle)

UINTmessage; 消息为-Unsign 整数(int)

WPARAMwParam; 相关参数后文说明

LPARAMtParam; 相关参数后文说明

DWORDtime 时间

POINTpt 鼠标光标位置

}MSG;

我们可以看到消息结构包含了按键鼠标时间等不同输入设备的数据,其中很重要的是第一项hWnd,这是消息所欲送到的窗口的句柄(handle)。也就是说“消息传送的最终目的地是窗口而不是程序” 这一点很重要请各位记住。

传送消息时如果程序正在忙碌来不及接收源源而来的消息那消息将会漏失掉,所以Wi ndows 的做法是先把消息放入消息队列(Message Queue)内等有空闲时再由程序主动从队列中读取消息。每个程序运行之初Windows 就会为它创建一个存放消息的队列称为应用程序消息队列(Application message queue)。当外部输入发生时输入设备的驱动程序会将输入转换成消息的格式收集到一个系统的队列(System queue),然后再由Windows 来分派到各应用的程序。

因为消息不会直接送给程序必须由程序主动从队列中读取,所以WinMain中通常会以一个循环来读取信息:

while (GetMessage( msg NULL 0,0))读取消息的循环

{

}

此循环用GetMessage()函数往该程序的message queue 读取消息并存入msg 结构变量,然后再由循环内部来处理消息。

GetMessage():多任务的基础

当GetMessage()从消息队列读消息时,则表示目前没有工作给该程序做。此时GetMessage()会自动将程序的控制权交给Windows,以便Windows 将控制权转移给下一个程序,这正是Wind ows 多任务的基础,

所以Windows 程序中一定要用GetMessage()来取消息多任务才能进行。

当我们操作窗口时(如按钮) 窗口必须对该操作有所反应。在Windows 下每个窗口背后都有一个窗口函数负责窗口对操作(输入)的反应也就是负责窗口的行为。因为窗口的“输入―反应”动作是通过消息来传送的所以窗口函数的工作就是按所收到的消息种类来决定反应的动作,因此窗口函数有时也称为“消息处理函数”,因为窗口函数对消息反应之不同每个窗口才有不同的行为。

典型的窗口函数的格式为:

Switch (message){case MSGI: 依据消息的种类

(procedure for MSGI);处理MSGI 消息的程序做不同的行为

break;

case MSG2:

(procedure for MSG2);

处理MSG2 消息的程序

break;

default:不想处理的消息就交给系统处理!

return(DefWindowPro((hwnd message

wParam lParam));

)

return (NULL);

Windows 会将各类消息输入它们所应属于的窗口函数。例如您在某个窗口按下鼠标或选择某个菜单命令,系统当然要指明是在哪一个窗口进行的,还记得消息结构中的hWnd 吗?在msg.h Wnd 中就标示着消息所应送达的窗口代码,窗口函数在收到消息后就以switch-case 的方式来拾取它所关心的消息并加以处理,至于不是该窗口所要处理的消息则在default 处交给一个叫DefWindowProc() 的函数处理。Def:WndowProc() 是一个标准窗口处理函数(Default Window

Procedure) ,它会以Windows 的方式来处理消息例如窗口的放大缩小移动等标准的处理动作。

这种处理方式也有人称为“事件驱动方式”(event-driven)即事件(消息)才会引发动作,程序并不会主动做任何事,事件驱动的观念在Windows 编程中十分重要,等你学会Windows程序的基本结构之后方能体会它的基本精神!

Windows 程序的流程

WinMain()是Windows 程序的起始函数,通常它会做窗口注册,创建窗口,显示窗口的动作然后进入消息循环,此循环会不断地往消息队列中读取消息,一旦取得消息立刻用Dispatch Massage()通过系统来调用消息处理函数,如此一直循环直到GetMassage()找不到消息让出控制权才暂告休息。

WndProc()是处理消息的函数或称窗口,函数WndProc()统一由Windows 来调用,为一回调型的函数。WndProc()按消息来做出响应,是控制窗口行为的过程。

Windows 的程序流程如下:

外部输入动作发生被转换成消息

放入消息queue

由Get Message()读消息

Dispatch 消息给Windows

由Windows 回调(CALL BACK)消息处理函数(窗口函数)

读一下消息若无消息则将控制权交回Windows 由Windows

将控制权交给下一程序

(全文完)如有不当之处,诚请指出!

原文转自:www.ltesting.net

篇9:使您的程序支持多语言.net

关键字多语言multi-languagemultilanguage 首先,在你创建了一个应用程序后,需要创建一个dll,该dll包含了你程序的资源,资源的ID与你程序的完全相同,但内部的语言不同, 具体方法如下:新建一个dll项目,然后把你程序的资源文件复制到dll项目资源中即可,

关键字  多语言 multi-language multilanguage

首先,在你创建了一个应用程序后,需要创建一个 dll ,该 dll 包含了你程序的资源,资源的 ID 与你程序的完全相同,但内部的语言不同。

具体方法如下:新建一个 dll 项目,然后把你程序的资源文件复制到 dll 项目资源中即可,接下来,修改 dll 项目中资源的语言(这可能需要花一点时间)。然后只要简单修改一下你的程序代码就可以了:

在 CWinApp 继承类中,添加一个成员变量(我使用的是日语):

...

HINSTANCE hJapaneseDll //Global var

.....

在 InitInstance 中添加一下代码(粗体部分是我添加的):

CMultiLangApp::InitInstance()

{

......

//Get Language Setting from INI

uLanguage = GetProfileInt(“Language”, “Language”,0);

if (uLanguage == 1)

{

//Language is set for Japanese.

hJapaneseDll = AfxLoadLibrary(“Japanese.dll”);

ASSERT(hJapaneseDll);

AfxSetResourceHandle(hJapaneseDll);

}

.....

//create dialog or main frame

.....

}

最后,你可以添加一个菜单项或者单选按钮,用于切换语言

原文转自:www.ltesting.net

SSH构建的银行管理系统设计与实现论文

Windows API 程序的组织结构.net

安卓实习心得感悟

基于WEB的工作计划流程管理系统的设计与实现

系统加速我用Windows系统四大自带工具

基于ASPnet绩效工资管理系统设计与实现论文

计算机实验报告

计算机导论学习总结报告

计算机网络综合实验报告参考

让Windows /XP快速复制移动文件Windows系统

通用菜单生成程序.net
《通用菜单生成程序.net.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【通用菜单生成程序.net(共9篇)】相关文章:

大学大学计算机实验报告2023-04-10

国寿计划书生成系统2022-05-02

谁知道IBM大型机维护人员的工资是多少Windows系统2022-07-23

Excel服务器教程2023-10-20

加强Windows安全性2022-09-07

校园管理系统毕业论文2022-05-07

Windows中创建.htaccess文件方法介绍Windows服务器操作系统2022-04-30

会计电算化的考试试题2022-04-30

有关学生学籍管理系统2023-10-04

广州会计电算化基础知识考试试卷2023-02-04