C++でウィンドウプログラムをするには

解決


みけにゃん  URL  2007-03-24 08:07:06  No: 64745  IP: 192.*.*.*

Win32SDKだけでメールプログラムを作ってきましたが、あまりにも
C++のソース(たいていはMFCだと思う)で書いてあるのが多いので
C++に書き直そうかなぁ・・・と考えていたりするのですが、C++で
Windowプログラムを書くときはやっぱりMFCか.NET Frameworkしか
ないのでしょうか?

そのままは無理だとしてもWin32SDKをそのまま生かした感じで作りたいです。
よろしくお願いします。

編集 削除
YuO  2007-03-24 09:50:20  No: 64746  IP: 192.*.*.*

Win32 SDKは言語でもなんでもないのですが……。
普通にC++ + Win32 SDKでプログラムを作れますが,何を知りたいのでしょうか。

編集 削除
Ban  2007-03-24 09:50:49  No: 64747  IP: 192.*.*.*

C++からWin32SDKをそのまま使うことも可能ですし、やったこともあります。

既存のライブラリを持ってこないと今ひとつうまみにかける部分があるのは確かですが、
まずは言語だけC -> C++に移行するだけでも、個人的にはすごーく楽になると思います。

俗にbetter C等と呼ばれるC++の非オブジェクト指向的な使い方でもCよりマシ。

クラス化などすればもっと楽。MFCってのは、結局それを
「MSがある程度クラス化しときました」ってだけのものなので、
中身はSDKのラッパーみたいなものですし。(Win32SDKの知識がないと駆使できない>MFC)

なお、.NET frameworkとなるとまた別物で、純粋な標準C++ベースでは
.NET frameworkで動かないです。
# .NET 1.xの頃は、Managed C++と呼ばれるMS独自拡張C++でしたし、
# .NET 2.0以降は、C++/CLIという「C++とは別の新言語(但しかなり似てる)」になりましたし。

編集 削除
みけにゃん  URL  2007-03-24 23:25:22  No: 64748  IP: 192.*.*.*

今作っているメールプログラムでC++のクラスをつかったりしたら
もう少しコードがわかりやすくなるのかなぁ・・・と思って
質問してみたのです。

猫でものC++編にはコンソールプログラムしかなくて、Windowの
プログラムはWin32SDK+ノーマルのCで書かれているので
C++で同じような書き方はできないのかなぁ・・・・と
思ったのです。(C++でWindowというとMFCか.NETしか思いつかないので)

とりあえず雛形プログラムの作り方を知りたいです。
→WinMainとWndProcがあってWndProcの中にはWM_CREATEと
WM_DESTROYがあるシンプルなものです。

編集 削除
Blue  2007-03-25 00:52:11  No: 64749  IP: 192.*.*.*

>→WinMainとWndProcがあってWndProcの中にはWM_CREATEと
>WM_DESTROYがあるシンプルなものです。
これだけだと、あまりC++とC言語との違いは感じられないかと。

ウィンドウをクラスとして(MFCでいうCWndクラス)使うとかであれば、
「WndProc クラス化」
あたりで、Google検索とかしてみればいろんなサンプルが見つかります。

編集 削除
YuO  2007-03-25 01:13:03  No: 64750  IP: 192.*.*.*

Cの時のコードを,拡張子を.cppにしてコンパイルすれば,
C++のプログラムにおそらくなります。
# キャストとか予約語とかで一部の非互換によるエラーが出る可能性はあり。

編集 削除
 2007-03-25 02:39:44  No: 64751  IP: 192.*.*.*

発言内容を見てるとC++のことよくわかってなさそうな感じを受けますが…

編集 削除
PATIO  2007-03-26 10:57:36  No: 64752  IP: 192.*.*.*

C++言語の知識に不安があるならそっちから勉強した方が良いです。
文法がわかる事はもちろん必要ですけれど、クラスの概念とか派生、
仮想関数等のオブジェクト指向の部分の知識も必要になります。
で、この辺がわかって無いとMFCを使いこなせません。
なぜならMFCはクラスライブラリだからです。
MFCの作法に則るのであれば、Win32APIのやり方にこだわらない方が良いと
思います。但し、Win32APIでやってきたウインドウメッセージ周りの
ハンドリングとか基本的なメッセージの流れの知識はMFCでも非常に役に立ちます。
最終的にはそこに帰着するので。
この辺はあまりあせらずにきちんと積み上げた方が後々楽が出来ると思います。

編集 削除
PATIO  2007-03-26 10:59:45  No: 64753  IP: 192.*.*.*

Win32APIでやってきたウインドウメッセージ周りのハンドリングが
MFCのフレームワークでどのように実現されているのかを理解できれば、
Win32APIの知識がある分だけ有利になります。
そういう意味では勉強する順番としては良かったのではないかと思います。

編集 削除
みけにゃん  URL  2007-03-27 22:12:13  No: 64754  IP: 192.*.*.*

学生の頃少し授業でMFCの事はやりましたけれどやっぱりSDKプログラムの方が
直感的な感じがして今でもMFCを使わず作っていたりします。

翔泳社から出ているVC++のプログラムの本(1巻がSDK、2巻がC++、3巻がMFC)の本は
学校の教科書として使ってましたが、もっぱらSDKプログラムで書く事が
多くてこんな感じになってるのかもしれないですね。

やさしいC++第二版(ソフトバンクハプリッシング)を購入してみたのでC++の勉強も
してみて、MFCプログラムにも挑戦してみようかなぁ・・・と思います。
→MFCの本も学校で買ったけれどあんまり使わなかったです

WndProc クラスの方も検索してみて結構いろんなサンプルがある事は確認しました。
まだまだ知識が足りないようで迷惑をかけてしまいすみませんです。

ひとまず解決としてクローズさせて頂きます。

でも、今からMFCを学んでも大丈夫なのでしょうか?

編集 削除
επιστημη  2007-03-28 10:13:45  No: 64755  IP: 192.*.*.*

> でも、今からMFCを学んでも大丈夫なのでしょうか?

何を心配しているのかしら?

編集 削除
みけにゃん  URL  2007-03-28 22:14:36  No: 64756  IP: 192.*.*.*

Document/Viewの概念をCLI/C++とVBまたはC#で実装していくという
やり方を今後しなくてはならなくなると二つの言語を掛け持ち
しなくちゃいけないので結構負担になりそうです。
→ただしC/C++で1からフォーム設計をするのは結構つらいですが。

編集 削除
επιστημη  2007-03-29 09:47:50  No: 64757  IP: 192.*.*.*

> えっと@ITのεπιστημηさんのコラム(C/C++の資産を.netになんとか)を
> 見て、今からMFCをやっていたらまずいのかなぁ・・・という感じに
> 思えしまったのです。

まずくはないでしょけどもWin32アプリにこだわる気がないなら
とっととWindowsFormsに寝返ればええです。

> Document/Viewの概念をCLI/C++とVBまたはC#で実装していくという
> やり方を今後しなくてはならなくなると二つの言語を掛け持ち
> しなくちゃいけないので結構負担になりそうです。

全部をC++/CLIでやるのはもっとウザいかもよ?

編集 削除