- ベストアンサー
ウインドーズ画面にしてみたいんです
#include<stdio.h> int main(void) { int a,b,c; a = 2; b = 3; c = a+b; printf("a+b=%d\n",c); return 0; } 2+3=5 の表示をコマンドプロントに出すところまで理解できたのですが(画面に出ました)、ボタンで実行、ラベルに表示させることが分からないのです。 "hello world"の文字を表示させるものは理解できたのですが、上の計算のような場合はどうすれば良いのでしょか? ボタンとラベルを取り付けることだけは出来ます>< 入門レベルの問題で申し訳ありませんが、趣味で始めてみようかとちょっとがんばってるのでお時間のありましたら答えて頂けないでしょうか。 visual c++ 2008 Express Editionを使っています。 よろしくお願いします。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
なぜかみんな、C言語&Win32APIという難しい方法での GUIプログラミングを紹介していますが、 Visual C++ 2008 Express Editionをインストール済みであれば Windowsフォームで手軽にGUIプログラミングを楽めると思います。 まずは、 http://www.microsoft.com/japan/msdn/vstudio/2008/product/express/install_vc.aspx の手順をそのまま実施して、「時計」を作ってみてください。 それができたら、今度は項番8,9のTimerの替わりに「Button」を貼り付け、 項番10,11の替わりにbutton1_Click()関数の中に、 ------------------------ int a,b,c; a = 2; b = 3; c = a+b; label1->Text = "a+b=" + c; ------------------------ というコードを書いてみてください。 これだけで質問の内容は実現できると思います。 それができたら、今度はaやbをテキストボックスから 入力できるようにすれば、簡単な足し算電卓ができるでしょう。 ちょっとづつ改造していけば、そのうち本格的な電卓ができる かもしれませんね。
その他の回答 (8)
- cyacya2000
- ベストアンサー率54% (39/71)
先ほど書き忘れたことが2点ありました。 まず1点目 visual c++ 2008 Express EditionでWin32プロジェクトを作成したら プロジェクトメニューをクリックし、一番下のxxxのプロパティ(xxxはプロジェクト名)をクリック。プロパティページが開いたら、左側 構成プロパティの全般を選び、右側プロジェクトの既定値の文字セットを「マルチバイト文字セットを使用する」に変更してください。 2点目 お勧めしたサイトの最初に載っているプログラムに誤りが1箇所ありました。以下に訂正プログラムを示します。コピー&ペーストして実行してください。ウインドウが開くはずです。 #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); char szClassNme[] = "ウィンドウクラス・ネーム"; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow) { HWND hWnd; MSG msg; WNDCLASS myProg; if (!hPreInst) { myProg.style =CS_HREDRAW | CS_VREDRAW; myProg.lpfnWndProc =WndProc; myProg.cbClsExtra =0; myProg.cbWndExtra =0; myProg.hInstance =hInstance; myProg.hIcon =NULL; myProg.hCursor =LoadCursor(NULL, IDC_ARROW); myProg.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);//この行がサイトと違うよ myProg.lpszMenuName =NULL; myProg.lpszClassName =szClassNme; if (!RegisterClass(&myProg)) return FALSE; } hWnd = CreateWindow(szClassNme, "AAA", //ここに指定したものがタイトルバーに表示される WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (msg.wParam); } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); break; default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } return (0L); } 以上です。これで面白いと感じていただければ幸いです。
お礼
間違いを見つけられるのはすごい! これは早速やってみたいと思います。
- cyacya2000
- ベストアンサー率54% (39/71)
ウインドーズ画面に出したいと言う気持ちは良くわかります。コマンドプロンプトのプログラムと比べて、動いたときの感動が全然違いますから。 ウインドーズ画面にだすためには、Win32APIを使わなければなりません。これが素人にはわかりにくい物なのです。といっても、あきらめる事はありません。Win32APIに関していえば、パターンがある程度決まっているので、最初のうちは、見本をコピー&ペースト(そのまま流用)するだけでOKです。意味なんて興味を持った事項についてだけ、少しずつ調べていけばいいんです。わからなければおまじない程度に考えておけばかまいません。 visual c++ 2008 Express Editionをお使いなら、ファイルメニューから新規作成→プロジェクトで今まで「Win32コンソールアプリケーション」にしていた部分を「Win32プロジェクト」に変えて作成してください。次へを選んで空のプロジェクトにチェックを入れたら、あとは、サイトに載っているプログラムをそのままコピー&ペースト(貼り付け)してしまいましょう。 お勧めサイトとしては、「猫でもわかる」シリーズが良いと思います。そこからWindowsSDK編を選択していただければOKです。URLは http://homepage2.nifty.com/c_lang/index_sdk.html です。 とにかく、面白くなってくれば、今まで解らなかったことももう少し調べてみようと言う気になります。まずは面白さをしること、そのためには難しいことは考えず、とりあえず動かしてみること一番だとおもいます。
お礼
とりあえず動かしてみる事ですよね。 私にはそれしか覚えられる方法がないので、No.9さんまでのみなさんの回答で前が開けたように感じています。 別に仕事で使うわけでもなく趣味で始めているだけですが、いくつもサイトを覗いても難しいことばかりしか書いていません。 本を買うことも考えたのですが、始めたばかりの私にはどの本が良いのかも分かりません。 それでとりあえずまったくの無知な物でも少しは出来ることが分かれば、その時には自分に合う本も探せるだろうと思っているのです。 SDKについても次の課題にしてみます。
- tatsu99
- ベストアンサー率52% (391/751)
CでなくC#かVBにされてみてはいかがでしょうか。 C#ならCと構文が似ていますので、切り替えやすいかと思います。 Visual C# 2008 Express Edition がありますので、それを使用してください。 C#を使うと、何がうれしいかと言うと、Windowsのプログラムが、非常に簡単に作れることです。 当然、ボタンで実行、ラベルに表示させることも簡単に出来ます。 簡単な、Visual C#の入門書を1冊購入されることも、良いでしょう。
お礼
実はVBでも少しやってみました。 簡単そうだとは思ったのですが、なんとなくイメージだけでC++を覚えるほうが後々役立ちそうに感じただけです。 C++に切り替えた理由は、初心者の私には特別な理由はありません。 やり始めたC++はNo9さんの回答からまだ続けられることが分かったのでこのまま継続することにします。 ありがとうございました。
- zwi
- ベストアンサー率56% (730/1282)
ボタンを装備すると難しいので、マウスをクリックするだけで文字が表示されるのが、19章にありますのでこれをコピペしてください。 http://www.geocities.jp/ky_webid/win32c/019.html 手順を以下に示します。 1.新規作成でWin32プロジェクトを選びます。 2.空のプロジェクトで作成します。 3.プロジェクトの新しい項目の追加で、C++ファイル(.cpp)を追加します。 4.19章にある内容をコピペします。 5.F5でコンパイル&実行します。 6.ウィンドウをクリックすると文字が表示されます。 改造するポイントはWndProc関数内の TextOut( hDC, 50, 50, TEST_STR, (int)_tcslen(TEST_STR) ); のところです。
お礼
何度もありがとうございます。 私が求めていた内容はNO9さんの回答なのですが、まずはそれから始めて、次のステップでzwiさんの手順でやってみたいと思います。 今回No9さんまでの回答を読ませて頂いたことで、同じ結果を出すにもいくつかの考えた方があるのだということが分かり大きな進歩になりました。 諦めていただけに新たな目標も出来たので感謝しています。 ありがとうございました。
ウィンドウを作って操作するのは難しいので、しばらくコマンドプロンプトで動くプログラムをいろいろ作ってみてC言語の勉強をする、という手もあります。
お礼
そうなんですよね・・・ いろんなサイトで見るのですが、基本が分かっていないのでなかなか覚えられないのが現状です。 それでもコマンドプロントに出力出来たことは、私にとっては奇跡みたいなもので、これが出来ていなかったらこの質問も出さなかったはずです。 難しいのは分かっているので、ボタンとラベルだけで遊べたら良いなと思って質問したのですが、やはりそれだけの質問ではダメなんですね。 難しいプログラムを作りたいからというよりも、上の内容が出来ればそれだけで十分だったのですが残念です。
- zwi
- ベストアンサー率56% (730/1282)
>難しいものを作る考えはなく趣味で楽しむ程度なのですが、足し算という簡単な内容から作りながら覚えるのは無理なのでしょうか? ウィンドウに表示する。ボタンを制御すると言う事自体が難しいのです。 >本を読んでも学校に通っている訳でもないので良く分からないため、触って覚えようと思ったのです。 別に挑戦する事を止める気はありませんが、C言語初心者に難しい概念が多く出てくるので最初は難しすぎますよって話です。 とりあえず挑戦したければ、紹介したサイトに沿って挑戦してみてください。
補足
何度も返事を頂きありがとうございました。 これから書くことには無理して返事は書かなくても結構です。 初心者の立場から疑問なので、ひとつ書かせてください。 よく見る”hello world”を表示させる例題がありますけど、違う文字で表示させなさいと言われれば真似してつくることが出来ます。 私の求めているのは表示をさせたいというだけのものなのですが、計算結果をラベルに表示させるということだけ分かれば理屈はどうでも良かったのです。 もし、それ以上のことを望むならその時はまた方法を考えれば言いわけでとりあえずは2と3の合計を出し、ラベルに表示させればそれだけで良かったのです。 ここでは難しい質問をされる人ばかりで私のような愚問をされるような人は稀にしかいないでしょう。 しかし、いろんなサイトで見ても私が求めているものは見つからず、一から勉強するにもそれだけの力もありません。 遊び程度であってもそれに面白さを感じたことで、次の簡単であろう目標を決め進めて行こうかと考えましたが諦めます。 たった1・2行の追加で文字が出せるなら計算結果も少し変えるだけで出来るだろうと考えていたのです。 2+3=5を表示させるだけの内容はここでは書ききれないことだったのかと・・・ 素朴な疑問です。
- zwi
- ベストアンサー率56% (730/1282)
[補足] ちなみにWin32APIはC言語初心者が手を出すにはかなり難しいので、C言語を習得されて自分がC言語の中級者以上であると自信を持たれてから次のステップとして学ばれたほうが良いと思います。
補足
難しいものを作る考えはなく趣味で楽しむ程度なのですが、足し算という簡単な内容から作りながら覚えるのは無理なのでしょうか? 本を読んでも学校に通っている訳でもないので良く分からないため、触って覚えようと思ったのです。
- zwi
- ベストアンサー率56% (730/1282)
visual c++ 2008 Express EditionだとC++/CLI(.NET)を使うかWindowsAPIでウィンドウ表示するしかありません。 前者のC++/CLI(.NET)の場合は、C++言語の知識が必須でC言語の知識だけでは太刀打ちできません。 >ボタンとラベルを取り付けることだけは出来ます>< これは、C++/CLI(.NET)の環境のWidnwosフォームを使ったんだと思いますが、前述の通りC++が理解できなければ無理です。 後者の場合は、WindowsAPIの使い方を学ぶ必要があります。 http://www.geocities.jp/ky_webid/win32c/index.html 面倒ですがC言語だけで組めるのは、WindowsAPI(Win32API)だけです。
お礼
私が求めていた回答がこれだったのです。 私のような入門者がつまずくのはこの最初の段階だと思います。 ここをクリアーできて、後は繰り返し真似をすることで分からないことが理解できるものだと思っているのです。 そこから少しずつ改造してひとつずつ言語を理解していくことが、机上で本ばかりを眺めているよりは良いのではないかと思ってやっているのですが、趣味でする私にはそれが一番の方法かな?と思っています。 ありがとうございました。 いまから初めてみたいと思います。
補足
最後に補足欄になりましたが・・・ 思うような結果を出すことが出来たので、次のステップに進むことにしました。 また分からないことがあればみなさんよろしくお願いします。