トップページ⇒tech
448コメント128KB

C/C++でのWindowsPrograming議論スレ(質問お断り)

■ このスレッドは過去ログ倉庫に格納されています
00011NGNG
Windowsプログラムを作るにあたってのノウハウや
API の不可解な仕様・動作・規則・不具合の報告や議論、
回避方法等を語りあいましょう。

MFC ATL WTL 等は、それ専用スレがあるので、そちらでお願いします。
あと、APIに関する質問は「Win32API 質問箱」へどうぞ。

関連スレ
http://pc2.2ch.net/test/read.cgi/tech/1047819779/ Win32API 質問箱 Build10
http://pc2.2ch.net/test/read.cgi/tech/1047949606/ ■ VisualC++(MFC限定)相談室 MFC7.dll■
http://pc2.2ch.net/test/read.cgi/tech/1029029882/ ATL 相談室

過去スレ
http://pc2.2ch.net/test/read.cgi/tech/1018239290/ Windows Programing for C/C++(Not MFC)
00021NGNG
前スレのテンプレをそのまま使おうとしたら、サブジェクトが長すぎて
スレ立てられなかったので、可能な限り短くしてみました。
0003デフォルトの名無しさんNGNG
その前に重要なこと
「C++でWindowsProgrammingをする意義があるのかどうか」
と言うことについて議論しましょう。
0004デフォルトの名無しさんNGNG
>>3
VisualC++で用意されている以外のコントロールを
使いたい場合や標準的な動きでは無い挙動等を
実現したい場合なんかは、C/C++でプログラムするのが
一番、最適だと思うんだけど…

それとも、CかC++かって事?
0005デフォルトの名無しさんNGNG


























0006デフォルトの名無しさんNGNG
>>4
何を訳の分からんことを。
0007デフォルトの名無しさんNGNG
>>3=5=6
荒らし?
曖昧な質問しておいて「何を訳の分からんことを。」とは??
何がC++でWindowsProgrammingをする意義があって
何がC++でWindowsProgrammingをする意義が無いのか
自分で答えてから質問したら?
0008デフォルトの名無しさんNGNG
C++でWindowsProgrammingをするんなら普通MFCかWTL(ATL)使うだろ。
使わないとメッセージループさえ小汚い書き方しかできないし。
0009 NGNG
"Programming" "Programing"
0010デフォルトの名無しさんNGNG
最初のテーマ 「VisualC++で用意されている以外のコントロールを使いたい場合」

いいテーマだと思うのだが、いきなり高レベル過ぎるかもしれない。
まあ正確には 「非コモンコントロールを使いたい場合」 だ。

例えば、デスクトップやリストビュー(大きいアイコンモード?)のような物を自作したいのだが、どうやって作ろうかな。
これが巧く出来れば、将棋やチェスなどのコマを動かすゲームに応用できる。
他にも、ユーザが自分の好きな場所にボタンを配置してカスタマイズできるアプリにも。

上記のコントロールは議論されなくても良いから(俺が勝手に考える、で良い)、
何か新しいコントロールの案を出してみて。
0011 NGNG
「猫でも・・・」の章に沿って議論するってのも面白いかもしれない。
途中から議論に加わっても、ついて来易い。
0012デフォルトの名無しさんNGNG
>>8
PhotshopやFlash等の市販アプリも秀丸やBeckyInternetMail等のシェアウェアも
MFCを使ってないんだけど…。
結局、MFCもWTLも型にはまったアプリは作成しやすいかもしれんが
一旦、型を外れると使わないで書いた方が効率が良いという罠。
0013 NGNG
その効率は人に因る。スレ違いの話題はしないでクレ。
MFC と 非MFC の争いは他でやってくれ。
0014デフォルトの名無しさんNGNG
>>10
漏れはボタンとラジオボタンとチェックボックスは、自分で自作した。
マウス移動と押・離が判別できてビットマップが描画できれば
そんなに苦労する物でも無いと思うし…。画面のプロパティの
デザインの配色・サイズ等に全て合わせるのは、ちょっと面倒くさいが、
最大のメリットは「システムリソースを消費しない」って事かな。
スタッティックやグループボックスは直接書いてる。

ボタンが2画面にわたって、1000個以上あるってやつを組んだ事
あるんだけど、その時に作成した。
でも、今でも使ってる。結構、便利だよ応用効くし。

0015デフォルトの名無しさんNGNG
ちなみにBecky!はMFC使っているが。
0016デフォルトの名無しさんNGNG
おお、こんなスレがあったのか。じゃあ、俺の話を聞いてくれ(w
>>14
俺も自分でボタンコントロールを作った。↓こんな感じで
HANDLE CTL_CreateButton(HWND hWnd,LPSTR cText,
UINT uX,UINT uY,UINT uWidth,UINT uHeight,WORD wMsg);
内容はマウスメッセージをフックして、あとはhWnd上に指定された
座標で押されたらhWndに対してWM_COMMANDをLOWORDに
wMsgを入れてsendMessageするって、だけなんだけど。
開放はBOOL CTL_DestroyButton( HANDLE hButton );で開放。

PhotoShopとかも、自前コントロールを使ってるみたいだね。
現在の弱点(課題?)は、WindowsXPのスキンにどう対応したら
良いのか…という事かな。
0017デフォルトの名無しさんNGNG
>>9
>>2「可能な限り短く」するためにmを削ったんだろ
0018デフォルトの名無しさんNGNG
すげーな。自前コントロールって以外にメジャーだったんだな。
お前らスゲーよ。



> 最大のメリットは「システムリソースを消費しない」って事かな。
これ良く分からん。コモンも自前も同じようにリソースを消費すると思った。

> 内容はマウスメッセージをフックして、あとはhWnd上に指定された
プロシージャーに色々書き加える、でなくフック?
子ウィンドウをちょいちょいと工夫するだけで出来ると思ってた。
実際には大変なのだな。
まあ、俺がフックは面倒だと思っているからなのだが。
まさか "BUTTON" をフックしただけで「自分で」とは言わないだろうけれど。
0019デフォルトの名無しさんNGNG
自前コントロールつくる場合、俺は codeguruで要求に近いサンプルを手に入れて、
余計な機能削ったり、必要な機能付け加えたりするパターンが多いっす。
0020デフォルトの名無しさんNGNG
( ゚Å゚)ホゥ
0021デフォルトの名無しさんNGNG
>>19
俺もそう。海外のサイトはplanet source codeやcpde projectとか優れすぎたコード
いろいろあるよね。日本でサンプルコード載せたHPやってる個人ページは
ほとんど海外のパクリであまり勉強にもならんし。
0022デフォルトの名無しさんNGNG
>>12 一旦、型を外れると使わないで書いた方が効率が良いという罠。
はい、それはない。
MFCはともかく、WTLはコンドーム並みに薄い皮でラップしただけ。
operator HWND()をはじめとして、基本的に生APIと互換が取れてる物ばかり。
美味しいところだけ頂けるのに、なんで効率が落ちる?
0023デフォルトの名無しさんNGNG
>>22
スレ違い
0024デフォルトの名無しさんNGNG
>>19,21
海外のサイトは、あまり見てないなぁ。
全部、自分で考えた物なんで、結構、恥ずかしい事してるかも。
でも、ボタンを押した状態でマウスボタンを離さず移動した時の
挙動とか、その状態で戻ってきて離したりとか…。考えると
深いよね。あ、あと、TABオーダーとかもあるか。
002516NGNG
>>18
>これ良く分からん。コモンも自前も同じようにリソースを消費すると思った。
今、テストしたら、ボタンを12000個作ったあたりで、リソースが
無くなりました。こうなると、他のアプリもコントロールが作れなく
なります。テストしたのはWin2000だけど、Win9x系だと、もっと
シビア。1000個位で作れなくなるんじゃないのかなぁ。
単純に計算しても1つメモリ100byte食ってるとしても2万個作ったと
しても2M。メモリが足らなくなる訳が無い。
システムリソースは限られたシステムのスペースなので
なるべく使わないのが吉かなーと思う次第です。

> 子ウィンドウをちょいちょいと工夫するだけで出来ると思ってた。
いや、子ウィンドウを工夫するのでは無くhWnd上に直接描画します。
当然、hWndのプロシージャーに色々書き加える事でボタンを作成
できますが、汎用性を高める為に、なるべく隠ぺい化する事を
考慮してフック等を使ってます。こうする事で、いままでのボタンを作る
時にCreateWindow("BUTTON",〜ってやっていたのを
CTL_CreateButton(〜に置き換えるだけで、自前ボタンに
なるという事がメリットです。
0026デフォルトの名無しさんNGNG
>>23
1必死だな。
どうせ重複スレなんだから、どんな使い方しようが自由だろ
0027デフォルトの名無しさんNGNG
>>3=5=6=8=15=22=26
放置の方向で(y/Y)?
002814NGNG
そういえば、自前のコントロールで思い出したけど
DrawFrameControlというAPIがあるんだけど、
これ使えばボタン描画が楽々だ〜…とか思ったけど
フォーカス持ったボタンとか駄目なんだよね。
結局、フォーカス持ったボタンの描画を考えると
他のも全て描画するのも労力が変わらないんだよね。
MSは、なんでこんなAPI作ったんだろう。
誰か使ってる人いる?<DrawFrameControl
002914NGNG
>>28
あ、DrawFocusRectがあるけど、これもまた使えないんだよね。
使ってみるとわかるけど、本物(?)のボタンコントロールと
微妙に挙動が違うんだよね。うまく言えないけど、本物のボタン
コントロールとビットマップを並べて比べてみるとわかる。

…でも、そこまで同じにする事ないのかな。
0030デフォルトの名無しさんNGNG
FLTK
FOX
0031デフォルトの名無しさんNGNG
既存の SDK アプリをテンプレとして使うのと MFC 使うのとで差はあるか?
0032デフォルトの名無しさんNGNG
.Net Framework は?
0033 NGNG
なんと! 直接描画だったのか! 目から鱗とまではいかないが!
「自前コントロールって言っても、どうせ子ウィンドウの変形だろ」と思っていた自分が馬鹿だったのだ!
0034デフォルトの名無しさんNGNG
自前コントロール懐かしい...
MFCが糞だったWin3.1時代にツールバーもどきを作ったのを思い出した。
あの頃はプログレスメーター作るのも面倒かったよなぁ。
0035デフォルトの名無しさんNGNG
>>19,21
教えて君で申し訳無いんだけど、その「海外」の「自前のコントロール」の
ソースがある所を教えて欲しいんだけど。
codeguru, planet source code, cpde projectで検索したんだけど
目的の「自前のコントロール」の場所がよくわからなかった。
0036デフォルトの名無しさんNGNG
自前コントロールってペゾルド本に出てるようなカスタムコントロールじゃなくて?
0037デフォルトの名無しさんNGNG
FindFirstFileが使いにくすぎ。
つーかAPI全般がC用なのでC++に向かないのが難点。
GTKに対するGTK--のように、
WindowsにもWin32APIに対するWin32API++が必要だ。
0038デフォルトの名無しさんNGNG
そうか?
0039デフォルトの名無しさんNGNG
>>37
そのためのWTL
でもこのスレで持ち出すとスレ違いと言われる罠
0040デフォルトの名無しさんNGNG
GetDlgItemTextとかでサイズとか指定しなくても、
std::stringで受け渡しができるようになったらなあ…
0041デフォルトの名無しさんNGNG
>>28
使ってるけど(C/C++じゃなくてVBで)、
Windows標準に合わせ易いっていうメリットはどうよ?
色とかハイコントラストとか。
0042デフォルトの名無しさんNGNG
DrawFrameControlってXPルックとかにも
自動的に対応してくれるの?
0043デフォルトの名無しさんNGNG
良スレの予感
0044デフォルトの名無しさんNGNG
コントロールの自作ってことは当然CreateWindowExして
自分で配置するんだろうなー。
ダイアログリソースなんて軟弱ですか?
リソース(*.rcのことね)ってIDが実行ファイル毎だから
困るけど、MoveWindowで揃えるのもかったるいしー。
0045デフォルトの名無しさんNGNG
>>40
WTL
0046デフォルトの名無しさんNGNG
RegisterClassEx
CreateWindowEx
BeginPaint
SetWindowLong
SetScrollInfo
CreateCaret
これら関数を常用するようなら、
そこの貴方もコントロール自作してみてはどう?
0047デフォルトの名無しさんNGNG
>>44
よく読め。CreateWindowEx使ってるうちはまだ軟弱
(リソースの節約にならない)
SwingやGeckoやIEみたいにすべて自前描画。これ。
0048デフォルトの名無しさんNGNG
>>46
 CreateCaret って事は自前のエディットボックスもやったのか?
 さすがにそれは面倒だからやらんかったなぁ...
 表形式の物作る場合は入力用のコントロールを動かせば済むから...
0049あぼーんNGNG
あぼーん
0050デフォルトの名無しさんNGNG
HTML は読めなくてもいいから、ブラウザの描画・配置能力だけほしいって思ったことねぇ?
あのCSSでボーダーやフォント・背景色が自在に変えられるのは便利。

フォーム関連と、改行等だけに絞れば結構小さく作れないかな・・・。
プログラム側の使用に限定すれば文法エラー処理なんかも適当でいいし。
XML名前空間とか実装が面倒そうなのは無視して。
0051デフォルトの名無しさんNGNG
>>47
IEみたいに自分が設計したOS上で自前コントロールって
やっぱり変な会社だ。使えないって事を自分で言ってる
ようなもんだ。

やはり、自前描画、自前コントロール。作った所も認めてる(w
0052デフォルトの名無しさんNGNG
>>50
剥げ同。
HTMLだと無駄が多いから、
構造体の配列とかで実装してほしい。

>>51
HTML/CSSの仕様書読んだ事ある?
あの仕様というか推奨動作に合うように作るには、
独自でないと無理だと思われ。
また、MSとしても下位互換性の問題があるから、
下手に変更加えたり出来ないんでは?
VS.netでわざわざウェブフォームなんて作ったのもそれが根源でしょ。
005351NGNG
>>52
いや、HTMLの部分じゃなくて、履歴のウィンドウとか色々な所で
明らかに標準のコントロールじゃないのが、使われてるでしょ。
Officeなんか…(以下略)
0054デフォルトの名無しさんNGNG
それらはちゃんとウィンドウ作ってる
ウィンドウ作らないのはHTMLの部分。
言いたいことはわかるけど揚げ足取りに近いよ
0055デフォルトの名無しさんNGNG
正直MFCなどでフックを使ってサブクラス化するのはやめてほしい
0056デフォルトの名無しさんNGNG
Visual Studioでどんどんカコイイコントロールを使うのはいいんだが、
どうせならMFCや.NETで同じものを提供しほしい。
005752NGNG
>>53(51)
Spy++で調べたことある?
たしかにサイズ変更枠の部分はBaseBarというオリジナルクラスだが、
その中はレバーコントロールを使っていて、
「履歴」という文字列、バツ印、や
「表示(W)」等のメニューは、ツールバーコントロールを使っている。
また、履歴のリストはツリービューコントロール使ってる。
ので、ほとんど独自ではないぞ。

それと、HTML表示するのにウィンドウ作ってたら、
フォームとボタンを大量にあるページの描画は極端に遅くなるし、
ひょっとしたら、それを悪用してブラクラを作れるかもしれない。
ieが5.5から複数フレームから成るページをも、
1つのウィンドウで表示できるようにしたのはその為では?
005852NGNG
>>53
Officeは特別な存在で、
Mso9.dllとかがコモンコントロールの代わりのように使われてる。
でもこれは、時期ウィンドウズに搭載される(であろう)UIを、
その前に、そして以前のウィンドウズにおいても、
エンドユーザに提供するためでは、と思っている。
まあ、ある意味実験台かもな。
0059デフォルトの名無しさんNGNG
MFCとしては提供されないがAPIとしては提供されるな
0060デフォルトの名無しさんNGNG
ところでさ、みんなでMFCみたいなライブラリ作らない?
Mona Foundation Class って名前で。
略称が MFC になってしまうのが駄目なら、
Giko Foudation Class でもいいけど。

作る気は無い? ああ、それでは帰ります。
スレッドを汚して申し訳ありません。
0061デフォルトの名無しさんNGNG
>>60
名称は置いとくとして、
適当に作るとMFC相当以下のライブラリができる、
つまりは車輪の再開発になってしまうのでは?
006261NGNG
>>60
でも、C/C++から使える拡張コモンコントロールみたいなのは、
(機能が被ってなければ)歓迎する。
006360NGNG
あら、レスがついてしまいました。
個人的には WTL のような物が好みなのですが、
サクッと軽く作る、程度の物ではないですよね。
MFCも。

スレ汚しの自分に構ってくれてありがとう。
もう帰ります。
0064デフォルトの名無しさんNGNG
WTLのようなものが好みならWTLを使えばいいんじゃないか。
WTLの拡張とか修正とかならアリかもしらんが。

それよりはフリーなコントロールのほうが興味あるな。
006561NGNG
>>64
剥げ同。
はっきり言ってウィンドウクラスを目的にあわせて一々作るのは、
労力と見返りがちっともペイしない。特にフリーウェアだともう(中略
それ以外の処理は、目的に合わせて字目で暮らす作ったほうが早いし、
便利だし、実行速度も速い場合がほとんどなんだけどねぇ・・・


006661NGNG
s/字目で暮らす/自前でクラス/g
0067デフォルトの名無しさんNGNG
>>66
aキーに謝れ。
0068デフォルトの名無しさんNGNG
>>67
a キーがサボったんかも知れんぞ。(藁
0069デフォルトの名無しさんNGNG
>>67-68
ワラタ
0070!61NGNG
うちのマシンのaキーは反応が悪くてよくtypoする
0071デフォルトの名無しさんNGNG
Byte数を要求する関数は全部ラップしといて
 template<typename T>
 inline T* memcpy_s( T* dst, const T* src, size_t elem_cnt )
 { returns std::memcpy( dst, src, sizeof(T)*elem_cnt ); }
かならずそっちを使うようこころがける、とかしか無いんでない?
007271NGNG
うがー。ごばくスマソ。
0073デフォルトの名無しさんNGNG
>>71
でもその関数(゚∀゚)イイ!
007461NGNG
ごめんよ>Microsoft Natual Keyborad Eliteのaキーさん。

ところで、独自コントロール作るなら、
フレームは外せないよな。
で昔、階層構造が可能なフレームコントロールを作ったんだが、
誰か要る?
0075山崎渉NGNG
(^^)
0076デフォルトの名無しさんNGNG
山崎渉   マジUzeeeeeeeeee!! 
0077デフォルトの名無しさんNGNG
FLTKとかFOXとかwxWindowsじゃあかへんの?
0078デフォルトの名無しさんNGNG
お前らVisualStudioみたいな糞使ってないで
ProjectBuilder使えよ
ProjectBuilderの方が絶対に使いやすいし、GUIやエディタのフォントも綺麗

VisualStudio買う金で、Macを買えば無料でVisualStudioを超える最高の開発環境が付いてくるぞ。
今時Winで開発してる奴は浪費家かバカのどちらかだね!
0079デフォルトの名無しさんNGNG
>>78

( ´_ゝ`)
0080デフォルトの名無しさんNGNG
スレの主旨を理解できない奴に限ってここ見つけちゃうんだよな
0081デフォルトの名無しさんNGNG
>>77
独自ライブラリを使ってたり等、
コモンコントロールと挙動・使い方が異なるクラスはいただけない。

ところで、哀れな>>78が居るスレはここですか?
0082デフォルトの名無しさんNGNG
>>78は違うスレで何度か見たよ。
ただのコピペみたい。
0083デフォルトの名無しさんNGNG
wxWindowsはコントロールはネイティブのものを使ってたような
0084デフォルトの名無しさんNGNG
お前らVisualStudioみたいな糞使ってないで
ProjectBuilder使えよ
ProjectBuilderの方が絶対に使いやすいし、GUIやエディタのフォントも綺麗

VisualStudio買う金で、Macを買えば無料でVisualStudioを超える最高の開発環境が付いてくるぞ。
今時Winで開発してる奴は浪費家かバカのどちらかだね!
0085デフォルトの名無しさんNGNG
>>84

( ´_ゝ`)
0086デフォルトの名無しさんNGNG
>>85
>>84はコピペ
0087デフォルトの名無しさんNGNG
>>86
>>85はコピペ
0088デフォルトの名無しさんNGNG
>>86
>>1-1000はコピペ
0089山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0090デフォルトの名無しさんNGNG
ラジオボタンやチェックボックスって、

 [*] テキスト(&A)

な形式ですけど、ラベル文字列 + エディット/コンボボックスだと普通

 テキスト(&A) [入力文字列|▼]

と、説明文を前に置きますよね?つまり前後が逆。
混在するダイアログを作る時、テキストを揃えたいと思ったら、皆さんどんな揃え方をします?
0091デフォルトの名無しさんNGNG
スレタイの「質問お断り」が効果を発揮したことってあるんだろうか。
0092_NGNG
( ´∀`)/< 先生!!こんなのを見つけました。
http://web2001.kakiko.com/koma/hankaku/hankaku07.html
http://www.web2001.kakiko.com/koma/hankaku/hankaku08.html
http://web2001.kakiko.com/koma/hankaku/hankaku10.html
http://www.web2001.kakiko.com/koma/hankaku/hankaku09.html
http://web2001.kakiko.com/koma/hankaku/hankaku06.html
http://www.web2001.kakiko.com/koma/hankaku/hankaku05.html
http://web2001.kakiko.com/koma/hankaku/hankaku01.html
http://www.web2001.kakiko.com/koma/hankaku/hankaku02.html
http://web2001.kakiko.com/koma/hankaku/hankaku03.html
http://www.web2001.kakiko.com/koma/hankaku/hankaku04.html
0093デフォルトの名無しさんNGNG
>>90
>テキストを揃えたいと思ったら、
思わない。
0094デフォルトの名無しさんNGNG
>>1
WTL専用スレってどこ?
0095デフォルトの名無しさんNGNG
>>94
無い。ATLスレでやってる。
0096デフォルトの名無しさんNGNG
HWNDをハウンドと呼ぶとカッコイイことに気づいた。
0097デフォルトの名無しさんNGNG
>>96 NullPointerExceptionを「ぬるぽ」と呼ぶのと同じくらいカコイイ
0098デフォルトの名無しさんNGNG
>>97
ガッ
0099デフォルトの名無しさんNGNG
>>96
えっち窓のほうがやる気でるよ
0100デフォルトの名無しさんNGNG
  100ゲットオオォォ!!
 ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
.         ∩ ∩ 
        〜| ∪ |         (´´  
        ヘノ  ノ       (´⌒(´  
       ((つ ノ⊃≡≡≡(´⌒;;;≡≡≡
         ̄ ̄ ̄(´⌒(´⌒;;
         ズザーーーーーッ
0101デフォルトの名無しさんNGNG
>>100
かわいい…。
でも、チンコ立ってるようにも見えるね。
■ このスレッドは過去ログ倉庫に格納されています