もう少し詳しく質問文書かないと、ちゃんと答えてくれる人いないと思いますよ。
(トップ層の回答者は一日に何問も答えてるので、質問文が曖昧だと答えてもらえません…)
私は暇なのでサンプル書いてみました。
C言語は標準ではGUIは対応してないので、環境に対応したAPIやライブラリを使う必要があります。
Windows環境ならWindowsAPIが使えるので、それで書いてみました。
(c++でしか確認してないけど、Cでも動くはず…。)
C++
1 # include <windows.h>
2
3 LRESULT CALLBACK WndProc ( HWND , UINT , WPARAM , LPARAM ) ;
4
5 int WINAPI WinMain ( HINSTANCE hInstance , HINSTANCE hPreInst , LPSTR lpszCmdLine , int nCmdShow )
6 {
7 //各種変数・構造体宣言
8 HWND hWnd ;
9 MSG msg ;
10 WNDCLASS WndClass ;
11
12 //WNDCLASS構造体を初期化
13 WndClass . style = CS_HREDRAW | CS_VREDRAW ; //スタイル
14 WndClass . lpfnWndProc = WndProc ; //プロシージャ
15 WndClass . cbClsExtra = 0 ; //特別領域設定(通常は0で)
16 WndClass . cbWndExtra = 0 ; //特別領域設定(通常は0で)
17 WndClass . hInstance = hInstance ; //インスタンス
18 WndClass . hIcon = NULL ; //アイコン
19 WndClass . hCursor = LoadCursor ( NULL , IDC_ARROW ) ; //カーソル
20 WndClass . hbrBackground = ( HBRUSH ) ( COLOR_BTNFACE + 1 ) ; //背景色
21 WndClass . lpszMenuName = NULL ; //メニュー
22 WndClass . lpszClassName = "ButtonWindow" ; //クラス名
23
24 //WNDCLASSを登録(エラーなら終了)
25 if ( ! RegisterClass ( & WndClass ) ) return FALSE ;
26
27 //ウインドウを作成
28 hWnd = CreateWindow (
29 "ButtonWindow" , //クラス名
30 "ウインドウをボタンにする" , //ウインドウタイトル
31 WS_POPUP , //ウインドウスタイル
32 CW_USEDEFAULT , CW_USEDEFAULT , //位置
33 200 , 200 , //大きさ
34 NULL , NULL , hInstance , NULL ) ;
35
36 //ウインドウ作成に失敗したら終了
37 if ( hWnd == NULL ) return FALSE ;
38
39 //ウインドウを表示
40 ShowWindow ( hWnd , nCmdShow ) ;
41 UpdateWindow ( hWnd ) ;
42
43 //メインループ(ウインドウメッセージ処理)
44 while ( GetMessage ( & msg , NULL , 0 , 0 ) ) {
45 DispatchMessage ( & msg ) ;
46 }
47
48 //終了
49 return ( msg . wParam ) ;
50 }
51
52 //ウインドウプロージャー
53 LRESULT CALLBACK WndProc ( HWND hWnd , UINT msg , WPARAM wParam , LPARAM lParam )
54 {
55 HDC hdc ;
56 PAINTSTRUCT ps ;
57 static LPTSTR lptStr = ( LPTSTR ) "ボタンです。" ;
58
59 switch ( msg ) {
60 case WM_CREATE : //ウインドウが作成されたらここに来る(実は一番最初に来るわけではない…)
61 //ウインドウを円形にする
62 SetWindowRgn ( hWnd , CreateEllipticRgn ( 0 , 0 , 200 , 200 ) , TRUE ) ;
63 //ウインドウを画面の中心に設置(マルチディスプレイだと多分不具合が出る…)
64 SetWindowPos ( hWnd , HWND_TOPMOST ,
65 GetSystemMetrics ( SM_CXSCREEN ) / 2 - 100 ,
66 GetSystemMetrics ( SM_CYSCREEN ) / 2 - 100 ,
67 200 , 200 , SWP_NOACTIVATE ) ;
68 break ;
69 case WM_LBUTTONUP : //ボタン(ウインドウ)を押したらここに来る(大抵のソフトは押した瞬間じゃなくて、離した瞬間に処理してるのでUPの方で…)
70 if ( MessageBox ( hWnd , "ボタンが押されました。\n終了しますか?" , "確認" , MB_YESNO | MB_ICONWARNING ) == IDYES ) { //ダイアログ表示
71 DestroyWindow ( hWnd ) ; //はいを押したらウインドウを破棄
72 } ;
73 break ;
74 case WM_PAINT : //描画が更新される際にここに来る
75 hdc = BeginPaint ( hWnd , & ps ) ; //描画の準備
76 SetBkMode ( hdc , TRANSPARENT ) ; //背景を塗りつぶさない設定
77 TextOut ( hdc , 40 , 90 , lptStr , lstrlen ( lptStr ) ) ; //文字列を描画
78 EndPaint ( hWnd , & ps ) ; //描画の終了
79 break ;
80 case WM_DESTROY : //ウインドウが破棄されたらここに来る
81 PostQuitMessage ( 0 ) ; //終了メッセージをポスト(メインループで終了処理される)
82 break ;
83 default : //それ以外はデフォルトのプロージャに丸投げする
84 return ( DefWindowProc ( hWnd , msg , wParam , lParam ) ) ;
85 }
86 return 0 ;
87 }
ただ結構古い知識ですので、今はもっと楽に出来るライブラリがあると思います。
(マイクロソフトはなんだかんだ言って過去OSとの互換性残してくれるんで、古いWinAPIの書式でも動きますが…)
今みたいな曖昧な質問文なら、「C言語で使えるお勧めのGUIライブラリは何ですか?」みたいな感じで聞いた方が、まだいい答えがもらえるかもしれません…。
WindowsAPIでいいなら「標準 Windows API 」のページが解り易くておすすめです。