c语言界面设计代码(c语言开发界面)

http://www.itjxue.com  2023-02-02 21:39  来源:未知  点击次数: 

怎么用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;

}

(责任编辑:IT教学网)

更多