C言語関係掲示板

過去ログ

No639 C言語でWinアプリを作る

[戻る] [ホームページ]
No.6793

C言語とは?
投稿者---直樹(2003/05/26 23:32:50)


最近疑問に思ったんですが、質問してもよろしいでしょうか。
CではWinアプリを作ることができるといいますが、DOSで入力するのと作成法においてどんな違いがあるのでしょうか?DOSで扱うにはボタンなどは必要ありませんが、Winアプリにはもちろんフォーム、ボタンなどいろいろなものが必要になりますよね?それをCでいちいちサイズなどを指定しないとWinアプリは作れないんですか?VB.NETみたいにボタンをマウスを使って設置できるといいますが、それはCなのですか?C++との作成面での違いは?
文がぐちゃぐちゃですみません。意味不明な文ですが答えれるところがあれば、答えていただきたいです。お願いします

No.6798

Re:C言語とは?
投稿者---ちぇっこり(2003/05/27 10:57:22)


おいらがわかる範囲ですが・・・

>>CではWinアプリを作ることができるといいますが、
>>DOSで扱うにはボタンなどは必要ありませんが、

作成できます。
ただ・・ここで言っておられる「DOSで扱う」というのは、
  実行〜決まったアクション〜処理(表示 等)〜結果。
という物だと思います。

Winアプリの場合、実行者が、いつ・何をするか・・わかりません。
プロセスを常駐させて、何かのアクションが起これば即時に対応する
プログラムでなければなりません。

この辺の違いがあると思います。


>>それをCでいちいちサイズなどを指定しないと
>>Winアプリは作れないんですか?

 Cで、作成しようとすると、全部指定が必要かと思います。
 VBなどは、その辺(サイズ 等)の部分をGUI化されてます。
 人がマウスやキーボードでボタンなどを作り、設定をする場合でも、
 内部的には、なんらかのプログラムが動いて、ボタン作成・設定
 をしてくれてるのです。
 CでWINアプリをする場合、
   その「内部的」な部分もコーディングしないと駄目です。
============
初歩プログラムとして、よく見かける「Hello world」ですが、
C言語とWinアプリのC言語ではかなり違います。

<C言語>
#include  <stdio.h>

int  main(void)
{
    printf("Hello world!!");
    return 0;
}

<WinアプリのC言語>
#define     STRICT
#include    <windows.h>

/*ウインドウプロシージャのプロトタイプ宣言*/
LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);

/*  アプリケーションエントリーポイント  */
int WINAPI WinMain(HINSTANCE    hInstance,
                   HINSTANCE    hPrevInstance,
                   LPSTR        CmdLine,
                   int          CmdShow)
{
    HWND            hwnd;   /*  メインウインドウのウインドウハンドル    */
    MSG             msg;    /*  メッセージキューから取得したメッセージ  */
    WNDCLASS        wc;     /*  ウインドウクラス登録用の構造体          */

    wc.style        =0;
    wc.lpfnWndProc  =WindowProc;
    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="Hello";
    
    if(RegisterClass(&wc)==0)       /*  ウインドウクラス登録    */
        return  0;

    hwnd=CreateWindow(  "Hello",    /*  ウインドウ作成          */  
                        "Hello world",
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        NULL,
                        (HMENU)NULL,
                        hInstance,
                        0);
    if(hwnd==NULL)
        return  0;

    ShowWindow(hwnd,CmdShow);           /*  ウインドウの表示        */
    UpdateWindow(hwnd);                 /*  ウインドウの最初の更新  */

    while(GetMessage(&msg,NULL,0,0))    /*  メッセージループ        */
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return  msg.wParam;
}

/*  ウインドウプロシージャ  */
LRESULT CALLBACK WindowProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{
    HDC    hdc;
    char    str;

    switch(message)
    {

      case WM_CHAR:                    
          hdc = GetDC(hwnd);            
          wsprintf(&str,"%c",(char)wparam);
          TextOut(hdc,1,1,&str,1);    
          ReleaseDC(hwnd,hdc);            
          break;                    
        case WM_DESTROY:                
                PostQuitMessage(0);            
        break;                    
                /*return  0;*/                
    }
    return  DefWindowProc(hwnd,message,wparam,lparam);
}


え?初歩でこんなに長いの!?
って感じではないかと思いますが・・・・長いですね(笑)

後は、自分で調べてみて下さい。
長くてすみません。

No.6825

Re:C言語とは?
投稿者---直樹(2003/05/27 19:06:22)


お二方返信をどうもありがとうございます。
とてもよく分かりました。Winアプリを作るときのコンパイラは
どのようなのがいいでしょうか?
あと、よく求人でプログラマーは「C言語ができる人〜募集」とかありますよね?あれはWinアプリが作成できる人、ってことで解釈しても宜しいのでしょうか?
お騒がせして申し訳ありません

No.6827

Re:C言語とは?
投稿者---物見遊山(2003/05/27 20:04:56)


>あと、よく求人でプログラマーは「C言語ができる人〜募集」とかありますよね?あれはWinアプリが作成できる人、ってことで解釈しても宜しいのでしょうか?

多分違う。

POSIXやItronなんかもCの関数形式でAPIを定義しているので
こういうOSを使う会社のプログラマもC/C++で組むハズ。

Windowsで開発者を募集してる場合はMFCとかVC++とか、そーいう言葉を使ってるはず。
だから募集欄でC++とVC++が別扱いになってるでしょ?

No.6831

Re:C言語とは?
投稿者---直樹(2003/05/27 21:36:39)


レスありがとうございます。よく分かりました。
それで、皆さんはどんなコンパイラ使ってるのでしょうか?
あと、Microsoft visual C++はCのをコンパイルするのも可能でしょうか?失礼します

No.6832

Re:C言語とは?
投稿者---YuO(2003/05/27 21:51:40)


>それで、皆さんはどんなコンパイラ使ってるのでしょうか?

私は,
・Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 11.00.7022 for 80x86
・Borland C++ 5.5.1 for Win32
・Digital Mars Compiler Version 8.29n
をインストールしていて,一番上のやつを主に使っています。
#早い話がVisual C++ Version 5.0 (Service Pack 3)


>あと、Microsoft visual C++はCのをコンパイルするのも可能でしょうか?失礼します

可能です。
ただし,/Tcオプションを使わずにファイル名を渡す場合は,拡張子が.Cでないといけません。


No.6844

Re:C言語とは?
投稿者---ちぇっこり(2003/05/28 10:17:30)


>レスありがとうございます。よく分かりました。
>それで、皆さんはどんなコンパイラ使ってるのでしょうか?

私は、Borland C++ 5.5.1 for Win32 を使ってます。(独学ですが・・)

  bcc32 -tW abc.c

で出来ます。(abc.cは、PG名)

No.6799

Re:C言語とは?
投稿者---YuO(2003/05/27 11:24:46)


> CではWinアプリを作ることができるといいますが、
> DOSで入力するのと作成法においてどんな違いがあるのでしょうか?

根本は変わりないです。
main(WinMain)という起点となる関数があって,
記述順に実行されていきます。

違うように見えるのは,DispatchMessageによってcallbackされる関数が,
ほとんどの処理の起点になるからでしょう。


> DOSで扱うにはボタンなどは必要ありませんが、
> Winアプリにはもちろんフォーム、ボタンなどいろいろなものが必要になりますよね?
> それをCでいちいちサイズなどを指定しないとWinアプリは作れないんですか?

指定しなくても作ってくれるようなライブラリを利用すれば,
Cでも指定しなくても利用できます。

逆に,MS-DOSでボタンをシミュレートすると,ライブラリ無しでは非常に面倒くさいです。


> VB.NETみたいにボタンをマウスを使って設置できるといいますが、
> それはCなのですか?C++との作成面での違いは?

リソースエディタを利用してダイアログを作ればGUIで作成できます。
ただし,RADではないですから,VBみたいにはいかないですが。

C++でも基本的にはCと同じです。
ただし,クラスライブラリという形でのサポートや,
VC++のAppWizard/ClassWizardのような形でのサポートがあるので,
MS-DOS時代のプログラムとはだいぶ異なった体裁を取るように見えます。