當前位置:首頁 » 編程語言 » 寫窗口軟體用c語言怎麼樣
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

寫窗口軟體用c語言怎麼樣

發布時間: 2022-07-04 06:14:51

⑴ 怎麼用c語言編寫一個windows窗口

  1. 調用window庫窗口函數即可創建windows窗口。

  2. 必須使用windows的編譯器,如VC,MS等等。

    RegisterClassEx函數:
    該函數注冊在隨後調用CreateWindow函數和CreateWindowEx函數中使用的窗口類。 RegisterClass函數己經由函數RegisterClassEx函數來代替,但是,如果不需要設置類的小目標則仍然可以使用RegisterClass函數。
    CreateWindowEx函數:
    該函數創建一個具有擴展風格的層疊式窗口、彈出式窗口或子窗口,其他與CreateWindow函數相同。關於創建窗口和其他參數的內容,請參看CreateWindow。具體仍可見微軟的msdn。
    消息處理函數WindowProc:
    該函數是一個應用程序定義的函數。它處理發送給窗口的消息。WINDPROC類型定義了一個指向該回調函數的指針。WindowProc是用於應用程序定義函數的佔位符。
    函數原型:
    LRESULT CALLBACK WindowProc (HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);
    參數:
    hwnd:指向窗口的句柄。
    uMsg:指定消息類型。
    wParam:指定其餘的、消息特定的信息。該參數的內容與UMsg參數值有關。
    IParam:指定其餘的、消息特定的信息。該參數的內容與uMsg參數值有關。
    返回值:返回值就是消息處理結果,它與發送的消息有關。

    一個簡單的Window的代碼如下:

    #include<Windows.h>
    #include<tchar.h>
    LRESULTWINAPIWinProc(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMlParam);
    intWinMain(
    __inHINSTANCEhInstance,
    __in_optHINSTANCEhPrevInstance,
    __inLPSTRlpCmdLine,
    __inintnShowCmd
    )
    {
    TCHAR*szName=_T("myWindow");
    WNDCLASSEXwc={0};
    HWNDhWnd=NULL;
    MSGMsg={0};
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.cbSize=sizeof(WNDCLASSEX);
    wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//通過函數來設置一個白色的背景,這里大家設置為NULL看看,會很有趣的
    wc.hCursor=NULL;//不設置
    wc.hIcon=NULL;//不設置
    wc.hIconSm=NULL;//不設置
    wc.hInstance=hInstance;//當前程序的句柄,hInstance是有系統給傳遞的
    wc.lpfnWndProc=WinProc;//窗口處理過程的回調函數。
    wc.lpszClassName=szName;//窗口類的名字。
    wc.lpszMenuName=NULL;
    wc.style=CS_HREDRAW|CS_VREDRAW;
    RegisterClassEx(&wc);//在系統中注冊
    hWnd=CreateWindowEx(WS_EX_CLIENTEDGE,szName,_T("我的窗口我喜歡"),WS_OVERLAPPEDWINDOW,
    200,100,600,400,NULL,NULL,hInstance,NULL);//創建窗口,窗口標題為"我的窗口我喜歡"
    if(hWnd==NULL)
    {
    MessageBox(NULL,_T("There'sanError"),_T("ErrorTitle"),MB_ICONEXCLAMATION|MB_OK);
    return0;
    }
    ShowWindow(hWnd,nShowCmd);//顯示窗口
    UpdateWindow(hWnd);
    //下面是對消息的循環處理,大家先不必管這些,下節課我會細說的
    while(GetMessage(&Msg,NULL,0,0))
    {
    TranslateMessage(&Msg);//翻譯消息
    DispatchMessage(&Msg);//分派消息
    }
    returnMsg.message;
    }
    //消息處理函數
    LRESULTWINAPIWinProc(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMlParam)
    {
    switch(Msg)//處理消息過程
    {
    caseWM_DESTROY://響應滑鼠單擊關閉按鈕事件
    PostQuitMessage(0);//退出消息隊列
    return0;//退出函數
    }
    returnDefWindowProc(hWnd,Msg,wParam,lParam);
    }

⑵ 用C語言怎樣做一個窗口化的軟體

C語言只是語法而已
看 Windows編程 C語言版

⑶ 如何用C語言編寫一個窗體應用程序

要用C語言編寫一個窗體應用程序需要調用系統或第三方提供的API函數,一般的步驟是:
定義窗口類
注冊窗口類
創建窗口
顯示、更新窗口
進行消息循環,不斷處理窗口消息

⑷ c語言學完可以寫軟體

C語言是目前世界上流行、使用非常廣泛的高級程序設計語言。
在TIOBE已公布2020年8月的編程語言排行榜。C語言依然保持排行第一!

C語言對操作系統和系統使用程序以及需要對硬體進行操作的場合,用C語言明顯優於其它高級語言,許多大型應用軟體都是用C語言編寫的。
C語言具有繪圖能力強,可移植性,並具備很強的數據處理能力,因此適於編寫系統軟體,三維,二維圖形和動畫它是數值計算的高級語言。
因為C語言具有高級語言的特點,又具有匯編語言的特點,所以可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。其應用范圍極為廣泛,不僅僅是在軟體開發上,各類科研項目也都要用到C語言。

如今只要是在學習計算機相關專業的同學,C語言都是一個必不可少的學習課程,但是學了能做什麼,相信太多人都不了解了
總的來說,C 語言的用途分為 上層開發和底層開發。
1、上層開發
其實用 C 語言做上層應用程序開發和寫界面不是明智的選擇,比如 Windows 上面,畫個窗口,寫個消息處理函數,麻煩的要死。
做上層應用程序開發,其實大家都在用:
Windows:C++,MFC/QT
Android:Java
IOS:ObjecTIve-c / swift
Linux:C\C++,GTK+/ QT(Linux 圖形界面應用程序)
2、底層開發
C 語言主要的用途還是底層編程,例如系統軟體:編譯器,JVM,驅動,操作系統內核,還有各種嵌入式軟體,固件。
下面列舉了C語言一些常見的領域:
1)應用軟體。Linux操作系統中的應用軟體都是使用C語言編寫的,因此這樣的應用軟體安全性非常高。
2)對性能要求嚴格的領域。一般對性能有嚴格要求的地方都是用C語言編寫的,比如網路程序的底層和網路伺服器端底層、地圖查詢等。
3)系統軟體和圖形處理。C語言具有很強的繪圖能力和可移植性,並且具備很強的數據處理能力,可以用來編寫系統軟體、製作動畫、繪制二維圖形和三維圖形等。
4)數字計算。相對於其他編程語言,C語言是數字計算能力超強的高級語言。
5)嵌入式設備開發。手機、PDA等時尚消費類電子產品相信大家都不陌生,其內部的應用軟體、游戲等很多都是採用C語言進行嵌入式開發的。
6)游戲軟體開發。游戲大家更不陌生,很多人就是由玩游戲而熟悉了計算機。利用C語言可以開發很多游戲,比如推箱子、貪吃蛇等。
上面僅列出了幾個主要的C語言應用領域,實際上,C語言幾乎可以應用到程序開發的任何領域。
所以說,C 語言往深了學,要學習操作系統,雖然 C 語言和操作系統之間沒有必然聯系,但是別忘了,連操作系統都是 C 語言寫的,C 語言的主要用途也在底層開發上面。
初學者學完了基礎語法,厭倦了黑乎乎的界面,想寫出帶界面的程序?雖然利用 Windows api 也可以實現,但還是別折騰了,轉戰別的語言吧,有現成的輪子可以用,又何必造輪子。
沒辦法,C 語言就不是讓你寫 App 的。如此強大又備受歡迎的編程語言,其實遠沒有傳聞中的那麼難,沒有基礎也是可以學習的。

⑸ 如何用C語言開發窗體應用程序。。

C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
#include <windows.h>

//Function prototype.
int WINAPI WinMain(HINSTANCE,HINSTANCE ,LPSTR ,int);
LRESULT CALLBACK MainWndProc(HWND ,UINT ,WPARAM,LPARAM);

InitApplication(HINSTANCE);
InitInstance(HINSTANCE,int);

LRESULT CALLBACK MainWndProc(HWND hwnd,UINT nMsg,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;

switch(nMsg)
{
case WM_COMMAND:
{
hdc = GetDC((HWND)lParam);
GetClientRect ((HWND)lParam, &rect) ;
DrawText(hdc,"HOHO",-1,&rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
ReleaseDC((HWND)lParam,hdc);
}
break;
case WM_PAINT:
{
hdc = BeginPaint(hwnd,&ps);
GetClientRect (hwnd, &rect) ;
DrawText(hdc,"Hello Word",-1,&rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd,&ps);
}
break;
//按鍵
case WM_KEYDOWN:

if(wParam == VK_ESCAPE)
SendMessage(hwnd,WM_CLOSE,0,0);

break;
case WM_CHAR:
switch(wParam)
{
case 'w':
MessageBox(hwnd,"UP","KeyBorad Input",MB_OK);
break;
case 's':
MessageBox(hwnd,"DOWN","KeyBorad Input",MB_OK);
break;
case 'a':
MessageBox(hwnd,"LEFT","KeyBorad Input",MB_OK);
break;
case 'd':
MessageBox(hwnd,"RIGHT","KeyBorad Input",MB_OK);
break;
}
break;

//關閉
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;

default:
return DefWindowProc(hwnd,nMsg,wParam,lParam);
}
return 0;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInStance,
LPSTR lpCmdLine,int nCmdShow)
{
MSG msg;

if(!InitApplication(hInstance))
{
MessageBox(NULL,"InitApplication Failed","Error!",MB_ICONEXCLAMATION | MB_OK);
return FALSE;
}
if(!InitInstance(hInstance,nCmdShow)){
MessageBox(NULL,"InitInstance Failed","Error!",MB_ICONEXCLAMATION | MB_OK);
return FALSE;
}

while(GetMessage(&msg,(HWND) NULL,0,0)>0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

InitApplication(HINSTANCE hInstance)
{
WNDCLASS wc;

wc.style = CS_DBLCLKS;
wc.lpfnWndProc = MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = "MainWClass";
return RegisterClass(&wc);
}

InitInstance(HINSTANCE hInstance,int nCmdShow){
HWND hwnd;
HWND hwndCloseButton;
hwnd = CreateWindow(
"MainWClass",
"Sample",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
(HWND)NULL,
(HMENU)NULL,
hInstance,
(LPVOID)NULL);

if(!hwnd)
return FALSE;

hwndCloseButton = CreateWindow(
"BUTTON",
"CLOSE",
WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
100,
100,
100,
80,
hwnd,
(HMENU)NULL,
hInstance,
(LPVOID)NULL);

if(!hwndCloseButton)
return FALSE;

ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
return TRUE;
}

⑹ C語言能編寫成窗口式的執行程序嗎

當然能了,因為Windows本身就是C語言編寫出來的.
不過寫Windows窗口程序要使用Windows API編程.

⑺ 用C語言和Java編寫一個窗口化程序,用哪個語言實現更簡單些

用C語言實現就比較復雜了,首先你要有C語言的基礎,在這之上你可以寫一些沒有界面的邏輯性代碼,假如你想要學習寫界面,很悲催的告訴你,你需要學一個MFC的東西,這個東西就是用C,C++實現界面程序的,它是C++的一個類庫,然後你要用它寫出一個界面,你還需要一個不是特別容易的學習過程;

總之MFC是屬於比較過時,復雜的東西了;
而java相對來說就特別容易了,樓上提到的C#,我覺得和java差不多。

⑻ C語言能不能開發Windows窗口程序

可以。
例如 調用 OpenGL 的 GLUT 工具包 ,就可以 寫出 窗口程序。
unix 上 調 X-window 庫 和 某些 工具包,可以寫 有聲有色 的 窗口程序。

⑼ 用C語言編寫窗口界面程序,應該學習什麼

C語方下可以在文本模式下作出,也可以在圖形模式下畫出,用的是一些擴展庫,就是說不是C標准庫,下面給一個框架,不知道建不建議學,感覺過時了,看你自已的興趣了,感興趣下了功夫肯定能學好,因為它根本就不難,只不過用了些非標准庫的所謂高級函數而已

#include <process.h>
#include <dos.h>

#include <conio.h>
#define Key_DOWN 0x5100
#define Key_UP 0x4900
#define Key_ESC 0x011b
#define Key_ALT_F 0x2100
#define Key_ALT_X 0x2d00
#define Key_ENTER 0x1c0d

void box(int startx,int starty,int high,int width);

main()
{
int i,key,x,y,l;
char *menu[] = {"File","Edit","Run","Option","Help","Setup","Zoom","Menu"};
/* 主菜單各項 */
char *red[] = { "F","E","R","O","H","S","Z","M" }; /* 加上紅色熱鍵 */
char *f[] = {"Load file", "Save file", "Print", "Modify ", "Quit A1t_x"};
/* File 項的子菜單 */
char buf[16*10*2],buf1[16*2]; /* 定義保存文本的緩沖區 */

while(1)
{
textbackground(BLUE);
clrscr();
textmode(C80);
window(1,1,80,1);/* 定義顯示主菜單的窗口 */
textbackground(LIGHTGRAY);
textcolor(BLACK);
clrscr();
gotoxy(5,1);
for(i=0,l=0;i<8;i++)
{
x=wherex(); /* 得到當前游標的坐標 */
y=wherey();
cprintf("%s",menu[i]); /* 顯示各菜單項 */
l=strlen(menu[i]); /* 得到菜單項的長度 */
gotoxy(x,y);
textcolor(RED);
cprintf("%s",red[i]); /* 在主菜單項各頭字元寫上紅字元 */
x=x+l+5;
gotoxy(x,y);
textcolor(BLACK); /* 為顯示下一個菜單項移動游標 */
}
gotoxy(5,1);

key=bioskey(0);
switch (key){
case Key_ALT_X:
exit(0); /* ALT_X 則退出 */
case Key_ALT_F:
{
textbackground(BLACK);
textcolor(WHITE);
gotoxy(5,1);
cprintf("%s",menu[0]); /* 加黑 File 項 */
gettext(5,2,20,12,buf); /* 保存窗口原來的文本 */
window(5,2,20,9);/* 設置作矩形框的窗口 */
textbackground(LIGHTGRAY);
textcolor(BLACK);
clrscr();
box(1,1,7,16); /* 調用作框函數 */
for(i=2;i<7;i++) /* 顯示子菜單各項 */
{ gotoxy(2,i);
cprintf("%s",f[i-2]);
}
gettext(2,2,18,3,buf1); /*將下拉菜單的內容保存在 buf1*/
textbackground(BLACK);
textcolor(WHITE);
gotoxy(2,2);
cprintf("%s",f[0]);/*加黑下拉菜單的第一項 load file*/
gotoxy(2,2);
y=2;

while ((key=bioskey(0))!=Key_ALT_X) /* 等待選擇下拉菜單項*/
{
if ((key==Key_UP)||(key==Key_DOWN))
{
puttext(2,y,18,y+1,buf1); /* 恢復原先的項 */
if (key==Key_UP)
y=y==2?6:y-1;
else
y=y==6?2:y+1;
gettext(2,y,18,y+1,buf1);/*保存要壓上光條的子菜單項*/
textbackground(BLACK);
textcolor(WHITE);
gotoxy(2,y);
cprintf("%s",f[y-2]); /* 產生黑條壓在所選項上 */
gotoxy(2,y);
}
else
if (key==Key_ENTER)/* 若是回車鍵,判斷是哪一子菜單按的回
車,在此沒有相應的特殊處理*/
{
switch ( y-1 ){
case 1: /* 是子菜單項第一項:Load file */
break;
case 2: /* Save file */
break;
case 3: /* print */
break;
case 4: /* modify */
break;
case 5:
exit(0);
default:
break;
}
break;
}
else
if (key==Key_ESC)
break; /* 是 Esc 鍵,返回主菜單 */
}
if (key==Key_ALT_X) exit(0);
break;
}
}
}
}

void box(int startx,int starty,int high,int width) /* 畫矩形框函數 */
{ int i;
gotoxy(startx,starty);
putch(0xda); /* 畫┌ */
for (i=startx+1;i<width;i++) putch(0xc4); /* 畫— */
putch(0xbf); /* 畫┐ */
for( i=starty+1;i<high;i++)
{
gotoxy(startx,i);putch(0xb3); /* 畫│ */
gotoxy(width,i);putch(0xb3); /* 畫│ */
}
gotoxy(startx,high);
putch(0xc0); /* 畫└ */
for (i=startx+1;i<width;i++) putch(0xc4); /* 畫— */
putch(0xd9); /* 畫┘ */
return ;
}

這算是個例題吧 照著這樣的格式 自己琢磨吧 想看書就看 《Windows程序設計》吧
裡面應該有介紹窗口設計的知識吧
希望對你有用 給點分吧 謝謝

⑽ C語言有什麼用,如何C用寫窗口程序

1、C語言的應用很廣的,比如 單片機,嵌入式,都需要C語言,而C語言也是非常合適類似開發的,這個是和硬體電路密切相關的,雖然很少用C語言開發可視化界面
(目前我沒有用過),但可以控制各種硬體的運行動作。此外.C語言可以開發可視化的程序界面,但這是高級的C語言編程,需要繼續學習才能了解的。更重要的
一點,學習C語言個人一種編程開發的思想,計算機的各種語言很多,但都有類似的地方,學過C語言在學習其他語言如java等就簡單了.
2、下面是一個在windows窗體上顯示樹形圖的程序。在vc6中新建win32工程(注意不是控制台)。然後新建c++源文件,粘貼代碼進去,編譯運行即可。

#include<windows.h>
#include<math.h>
#defineAD3.14159265*45/180//相鄰樹枝的旋轉角度
#defineGold0.618//相鄰樹枝的長度比例范圍0-1
#defineLen100//樹根的長度
HDChdc;
structNode
{
doublex;//節點坐標x
doubley;//節點坐標y
doubleAM;//節點的左右分支的中線方向
doubleLength;//節點的原支長度
structNode*LeftNode;//左分支
structNode*RightNode;//右分支
};
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);
voidDL(doublex1,doubley1,doublex2,doubley2);
voidDrawNode(structNode*ThisNode);
voidDrawTree(void);
//畫一條直線
voidDL(doublex1,doubley1,doublex2,doubley2)
{
MoveToEx(hdc,x1,y1,NULL);
LineTo(hdc,x2,y2);
}
voidDrawNode(structNode*ThisNode)
{
//左分支的地址、角度、長度、坐標
ThisNode->LeftNode=(structNode*)malloc(sizeof(structNode));
ThisNode->LeftNode->AM=ThisNode->AM+AD;
ThisNode->LeftNode->Length=ThisNode->Length*Gold;
ThisNode->LeftNode->x=ThisNode->x+cos(ThisNode->LeftNode->AM)*ThisNode->LeftNode->Length;
ThisNode->LeftNode->y=ThisNode->y+sin(ThisNode->LeftNode->AM)*ThisNode->LeftNode->Length;
//右分支的地址、角度、長度、坐標
ThisNode->RightNode=(structNode*)malloc(sizeof(structNode));
ThisNode->RightNode->AM=ThisNode->AM-AD;
ThisNode->RightNode->Length=ThisNode->Length*Gold;
ThisNode->RightNode->x=ThisNode->x+cos(ThisNode->RightNode->AM)*ThisNode->RightNode->Length;
ThisNode->RightNode->y=ThisNode->y+sin(ThisNode->RightNode->AM)*ThisNode->RightNode->Length;
//畫圖
DL(ThisNode->x,ThisNode->y,ThisNode->LeftNode->x,ThisNode->LeftNode->y);
DL(ThisNode->x,ThisNode->y,ThisNode->RightNode->x,ThisNode->RightNode->y);
//遞歸終點
if(ThisNode->Length>5)
{
DrawNode(ThisNode->LeftNode);
DrawNode(ThisNode->RightNode);//
}
}
voidDrawTree(void)
{
structNodeTreeRoot;
TreeRoot.x=500;//樹根的橫坐標
TreeRoot.y=Len;
TreeRoot.AM=3.14159265/2;
TreeRoot.Length=Len;
DrawNode(&TreeRoot);
}
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,
PSTRszCmdLine,intiCmdShow)
{
staticTCHARszAppName[]=TEXT("SineWave");
HWNDhwnd;
MSGmsg;
WNDCLASSwndclass;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("ProgramrequiresWindowsNT!"),
szAppName,MB_ICONERROR);
return0;
}
hwnd=CreateWindow(szAppName,TEXT("SineWaveUsingPolyline"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
returnmsg.wParam;
}
LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
PAINTSTRUCTps;
switch(message)
{
caseWM_SIZE:
return0;
caseWM_PAINT:
hdc=BeginPaint(hwnd,&ps);
DrawTree();
return0;
caseWM_DESTROY:
PostQuitMessage(0);
return0;
}
returnDefWindowProc(hwnd,message,wParam,lParam);
}