c语言界面设计代码(c语言开发界面)
怎么用c语言做一个界面?
空窗口:
#include?windows.h
/*?所有的窗口输出到这里去?*/
LRESULT?CALLBACK?WndProc(HWND?hwnd,?UINT?Message,?WPARAM?wParam,?LPARAM?lParam)?{
switch(Message)?{
/*?停止后,告诉主线程停止?*/
case?WM_DESTROY:?{
PostQuitMessage(0);
break;
}
/*?所有其他消息都使用默认程序处理?*/
default:
return?DefWindowProc(hwnd,?Message,?wParam,?lParam);
}
return?0;
}
/*?Win32?GUI程序的主要功能:从这里开始执行?*/
int?WINAPI?WinMain(HINSTANCE?hInstance,?HINSTANCE?hPrevInstance,?LPSTR?lpCmdLine,?int?nCmdShow)?{
WNDCLASSEX?wc;?/*?窗口的属性结构?*/
HWND?hwnd;?/*?"句柄"?一个窗口的标识符?*/
MSG?Msg;?/*?所有消息的临时位置?*/
/*?修改结构和设置的东西?*/
memset(wc,0,sizeof(wc));
wc.cbSize ?=?sizeof(WNDCLASSEX);
wc.lpfnWndProc ?=?WndProc;?/*?发送消息的地方?*/
wc.hInstance ?=?hInstance;
wc.hCursor ?=?LoadCursor(NULL,?IDC_ARROW);
/*?白色,COLOR_WINDOW是系统定义的颜色值,其数值是5?*/
wc.hbrBackground?=?(HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName?=?"WindowClass";
wc.hIcon ?=?LoadIcon(NULL,?IDI_APPLICATION);?/*?载入一个标准图标?*/
wc.hIconSm ?=?LoadIcon(NULL,?IDI_APPLICATION);?/*?使用名称“A”来作为该项目图标?*/
if(!RegisterClassEx(wc))?{
MessageBox(NULL,?"Window?Registration?Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return?0;
}
hwnd?=?CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Caption",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,?/*?x?*/
CW_USEDEFAULT,?/*?y?*/
640,?/*?宽度?*/
480,?/*?高度?*/
NULL,NULL,hInstance,NULL);
if(hwnd?==?NULL)?{
MessageBox(NULL,?"Window?Creation?Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return?0;
}
/*
所有的输入处理和发送到窗口过程。
注意,这个块代码流,直到它接收到的东西,?
所以回路不会产生不合理的高CPU使用率。?
*/
while(GetMessage(Msg,?NULL,?0,?0)??0)?/*?如果没有收到任何错误…*/
{
TranslateMessage(Msg);?/*?如果存在翻译关键码字符*/
DispatchMessage(Msg);?/*?发送它到WndProc?*/
}
return?Msg.wParam;
}
如何用C语言设计这个界面?尤其是边框
代码如下:
#include
stdio.h
#include
conio.h
int
main()
{
int
num
=
0;
//
要输入的数字
printf("|---------------------------------------|\n");
printf("|\t请输入选项编号(0-7):\t\t|");
printf("\n|---------------------------------------|\n");
printf("|\t1--输入:\t\t\t|\n");
printf("|\t1--显示:\t\t\t|\n");
printf("|\t1--查找:\t\t\t|\n");
printf("|\t1--最值:\t\t\t|\n");
printf("|\t1--插入:\t\t\t|\n");
printf("|\t1--删除:\t\t\t|\n");
printf("|\t1--退出:\t\t\t|\n");
printf("|---------------------------------------|\n");
printf("\t
");
scanf("%d",
num);
printf("\t输入了%d\n",
num);
getch();
return
0;
};
界面效果:
如何用c语言设计界面?
整体来讲, 用C语言实现图形化需要API函数, 在windows.h中声明.
但是它和C语言控制台下编程的区别可以说除了语法一样, 什么东西都不剩下. C库函数能实现的, API函数也全部都能实现, 而且功能更强大. 因此需要记忆的东西也就更多了, 但是绝对不可能把所有的API函数的用法全部知道, 只是知道大概, 一部分. 剩下不清楚, 或完全不懂的可以直接上MSDN, 百度百科或其他网站上去查询. 但是如果其他网站与MSDN说明有出入, 一定要以MSDN的为准.
所以"怎么用C实现图形化界面"在这里是不可能能说清的.
怎样用c语言写一个图形界面
代码
#include windows.h
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ) ; ? ? ? ?//声明用来处理消息的函数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )
{
static TCHAR szAppName[] = TEXT("MyWindow") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ; ? ? ? ?//声明一个窗口类对象
//以下为窗口类对象wndclass的属性
wndclass.style = CS_HREDRAW | CS_VREDRAW ; ? ? ? ? ? ? ? ? ? ? ? ? //窗口样式
wndclass.lpszClassName = szAppName ; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //窗口类名
wndclass.lpszMenuName = NULL ; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //窗口菜单:无
wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH) ; ? ?//窗口背景颜色
wndclass.lpfnWndProc = WndProc ; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //窗口处理函数
wndclass.cbWndExtra = 0 ; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//窗口实例扩展:无
wndclass.cbClsExtra = 0 ; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//窗口类扩展:无
wndclass.hInstance = hInstance ; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //窗口实例句柄
wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION ) ; ? ? ? ? ? ? ? //窗口最小化图标:使用缺省图标
wndclass.hCursor = LoadCursor( NULL, IDC_ARROW ) ; ? ? ? ? ? ? ? ? //窗口采用箭头光标
if( !RegisterClass( wndclass ) )
{ ? ?//注册窗口类, 如果注册失败弹出错误提示
MessageBox( NULL, TEXT("窗口注册失败!"), TEXT("错误"), MB_OK | MB_ICONERROR ) ;
return 0 ;
}
hwnd = CreateWindow( ? ? ? ? ? ? ? ? ? //创建窗口
szAppName, ? ? ? ? ? ? ? ? //窗口类名
TEXT("我的窗口"), ? ? ? ? ? //窗口标题
WS_OVERLAPPEDWINDOW, ? ? ? //窗口的风格
CW_USEDEFAULT, ? ? ? ? ? ? //窗口初始显示位置x:使用缺省值
CW_USEDEFAULT, ? ? ? ? ? ? //窗口初始显示位置y:使用缺省值
CW_USEDEFAULT, ? ? ? ? ? ? //窗口的宽度:使用缺省值
CW_USEDEFAULT, ? ? ? ? ? ? //窗口的高度:使用缺省值
NULL, ? ? ? ? ? ? ? ? ? ? ?//父窗口:无
NULL, ? ? ? ? ? ? ? ? ? ? ?//子菜单:无
hInstance, ? ? ? ? ? ? ? ? //该窗口应用程序的实例句柄
NULL ? ? ? ? ? ? ? ? ? ? ? //
) ;
ShowWindow( hwnd, iCmdShow ) ; ? ? ? ?//显示窗口
UpdateWindow( hwnd ) ; ? ? ? ? ? ? ? ?//更新窗口
while( GetMessage( msg, NULL, 0, 0 ) ) ? ? ? ?//从消息队列中获取消息
{
TranslateMessage( msg ) ; ? ? ? ? ? ? ? ? //将虚拟键消息转换为字符消息
DispatchMessage( msg ) ; ? ? ? ? ? ? ? ? ?//分发到回调函数(过程函数)
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
HDC hdc ; ? ? ? ? ? ? ? ?//设备环境句柄
PAINTSTRUCT ps ; ? ? ? ? //绘制结构
RECT rect; ? ? ? ? ? ? ? //矩形结构
switch( message ) ? ? ? ?//处理得到的消息
{
case WM_CREATE: ? ? ? ? ?//窗口创建完成时发来的消息
MessageBox( hwnd, TEXT("窗口已创建完成!"), TEXT("我的窗口"), MB_OK | MB_ICONINFORMATION ) ;
return 0;
case WM_PAINT: ? ? ? ? ? //处理窗口区域无效时发来的消息
hdc = BeginPaint( hwnd, ps ) ;
GetClientRect( hwnd, rect ) ;
DrawText( hdc, TEXT( "Hello, 卫班科技!" ), -1, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER ) ;
EndPaint( hwnd, ps ) ;
return 0 ;
case WM_LBUTTONDOWN: ? ? //处理鼠标左键被按下的消息
MessageBox( hwnd, TEXT("鼠标左键被按下。"), TEXT("单击"), MB_OK | MB_ICONINFORMATION ) ;
return 0;
case WM_DESTROY: ? ? ? ? //处理窗口关闭时的消息
MessageBox( hwnd, TEXT("关闭程序!"), TEXT("结束"), MB_OK | MB_ICONINFORMATION ) ;
PostQuitMessage( 0 ) ;
return 0;
}
return DefWindowProc( hwnd, message, wParam, lParam ) ; ? ? ? ?//DefWindowProc处理我们自定义的消息处理函数没有处理到的消息
}
较复杂的c语言程序设计源代码
一个“歼灭敌机”的小游戏,DEVc++通过编译:
#include stdio.h
#include conio.h
#include stdlib.h
#include windows.h
#include time.h
#define zlx 10 ?//增量坐标(x)让游戏框不靠边
#define zly 3?? //增量坐标(y)让游戏框不靠边
#define W 26? //游戏框的宽度
#define H 24 ?//游戏框的高度
int jiem[22][22]={0}, wj=10;? //界面数组, 我机位置(初值为10)
int speed=4,density=30, score=0,death=0; //敌机速度, 敌机密度, 玩家成绩,死亡次数
int m=0,n=0; ?// m,n是控制敌机的变量
void gtxy (int x, int y) ?//控制光标位置的函数
{ COORD pos;
pos.X = x;? pos.Y = y;
SetConsoleCursorPosition ( GetStdHandle (STD_OUTPUT_HANDLE), pos );
}
void?Color(int?a) ?//设定颜色的函数(a应为1-15)
{ SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), a ); }
void yinc(int x=1,int y=0) ? //隐藏光标的函数
{ CONSOLE_CURSOR_INFO ?gb={x,y};? ?//y设为0即隐藏
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), gb);
}
void csh( )? //初始化函数
{ int i;
Color(7);
gtxy(zlx,zly); printf("╔");? gtxy(zlx+W-2,zly); printf("╗");? //左上角和右上角的框角
gtxy(zlx,zly+H-1); printf("╚"); gtxy(zlx+W-2,zly+H-1); printf("╝"); //下边两框角
for(i=2;iW-2;i+=2) {gtxy(zlx+i,zly);? printf("═"); }? ????//打印上横框
for(i=2;iW-2;i+=2) {gtxy(zlx+i,zly+H-1); printf("═"); } ?//打印下横框
for(i=1;iH-1;i++) { gtxy(zlx,zly+i); ?printf("║"); }? ?????//打印左竖框
for(i=1;iH-1;i++) {gtxy(zlx+W-2,zly+i); printf("║"); }? //打印右竖框
Color(14); gtxy(19,2); printf("歼灭敌机"); Color(10);
gtxy(37,5); printf("设置:Esc ");
gtxy(37,7); printf("发射:↑ ");
gtxy(37,9); printf("控制:← → ");
gtxy(37,11);printf("得分:%d",score);
gtxy(37,13); printf("死亡:%d",death);
yinc(1,0);
}
void qcjm( ) ?//清除界面函数
{int i,j;
for(i=0;iH-2;i++)
for(j=0;jW-4;j++){gtxy(zlx+2+j,zly+1+i);printf(" ");}
}
void feiji( ) ?//飞机移动函数
{int i,j;
for(i=21;i=0;i--)? //从底行往上是为了避免敌机直接冲出数组
? for(j=0;j22;j++)
? ? ?{if(i==21jiem[i][j]==3)?jiem[i][j]=0;? //底行赋值0 以免越界
? ? ? ?if(jiem[i][j]==3)?jiem[i][j]=0, jiem[i+1][j]=3;
? ? ?}
if(jiem[20][wj]==3jiem[21][wj]==1) death++;
}
void zidan( ) ?//子弹移动函数
{ int i,j;
for(i=0;i22;i++)
??for(j=0;j22;j++)
? ? ?{if(i==0jiem[i][j]==2) jiem[i][j]=0;
? ???if(jiem[i][j]==2) {?if(jiem[i-1][j]==3) score+=100,printf("\7");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? jiem[i][j]=0,jiem[i-1][j]=2; }
? ? ?}
}
void print( ?) ?//输出界面函数
{int i,j;
qcjm( );
for(i=0;i22;i++)
for(j=0;j22;j++)
{ gtxy(12+j,4+i);
if(jiem[i][j]==3) {Color(13);printf("□");}
if(jiem[i][j]==2) {Color(10);printf(".");}
if(jiem[i][j]==1) {Color(10);printf("■");}
}
gtxy(37,11); Color(10);printf("得分:%d",score);
gtxy(37,13); printf("死亡:%d",death);
}
void setting( )? //游戏设置函数
{ qcjm( );
gtxy(12,4);printf("选择敌机速度:");
gtxy(12,5);printf("? 1.快 2.中 3.慢");
switch(getche( ))
? ? {case '1': speed=2; break;
? ? ?case '2': speed=4; break;
? ? ?case '3': speed=5; break;
? ? ?default: gtxy(12,6);printf("? 错误!默认值");
? ?}
gtxy(12,7);printf("选择敌机密度:");
gtxy(12,8);printf("? 1.大 2.中 3.小");
switch(getche( ))
? ? ?{case '1': density=20; break;
? ? ? case '2': density=30;?break;
? ? ? case '3': density=40; break;
? ? ? ?default: gtxy(12,9);printf("? 错误!默认值");
? ???}
for(int i=0;i22;i++)
?for(int j=0;j22;j++) jiem[i][j]=0;
jiem[21][wj=10]=1; jiem[0][5]=3;
gtxy(12,10);printf("? 按任意键保存...");
getch( );
qcjm( );
}
void run( ) ?//游戏运行函数
{ jiem[21][wj]=1;? //值为1代表我机(2则为子弹)
jiem[0][5]=3;? ?//值为3代表敌机
SetConsoleTitle("歼灭敌机"); ?//设置窗口标题
while(1)
? {?if (kbhit( ))? //如有键按下,控制我机左右移动、发射或进行设定
? ? ?? {int key;
? ? ? ? if((key=getch( ))==224) key=getch( );
? ? ? ? switch(key)
? ? ? ? ?? {case 75: if(wj0) jiem[21][wj]=0,jiem[21][--wj]=1; break;
? ? ? ? ? ? case 77: if(wj20)?jiem[21][wj]=0,jiem[21][++wj]=1;?break;
? ? ? ? ? ? case 72: jiem[20][wj]=2; break;
? ? ? ? ?? case 27: setting( );
? ? ? ?? }
? ? ? }
?? if(++n%density==0)? //控制产生敌机的速度
? ? ? { n=0;srand((unsigned)time(NULL));
? ? ? ? jiem[0][rand( )%20+1]=3;
? ? ? }
?? if(++m%speed==0) { feiji( ); m=0; } ?//控制敌机移动速度(相对子弹而言)
?? zidan( ); ? //子弹移动
?? print( ); ? //输出界面
Sleep(120); ? //延时120毫秒
? }
}
int main( )
{csh( );
?run( );
?return 0;
}