トップページ⇒tech
986コメント346KB

★初心者にVisual C++を教えるスレ★ Part38

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/11/03(木) 00:54:48.61
Visual C++入門者・初心者からの質問を、
お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう、特にWindowsForm、MFC、Win32アプリケーションの区別。
・できるだけ具体的に。

質問の仕方については次のページが大変参考になります。
http://www.hyuki.com/writing/techask.html

■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
 (MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。

【過去スレ】
Part37 http://hibari.2ch.net/test/read.cgi/tech/1299982561/
Part36 ttp://hibari.2ch.net/test/read.cgi/tech/1273939582/
Part35 ttp://pc12.2ch.net/test/read.cgi/tech/1256645713/
Part34 ttp://pc12.2ch.net/test/read.cgi/tech/1245382769/
Part33 ttp://pc12.2ch.net/test/read.cgi/tech/1235292263/
0410デフォルトの名無しさん2012/07/16(月) 19:55:41.51
>>409
作ってみれば・・・
0411デフォルトの名無しさん2012/07/16(月) 19:56:29.59
もろちん韓国ネタもくそうざくて視聴率低下の要因ではあるんだろうけど
ソレ以外の番組も吉本芸人とかがクチャクチャくだらねえことやってるだけだし
そっちも問題視しろよwww
いやなら見るなとかホザいてたのも吉本芸人だっけ?ざまあねえなwww
0412デフォルトの名無しさん2012/07/16(月) 21:29:30.21
レスをちゃんと読んでる?
求める答えしか目に入れる気がないのかね。
0413デフォルトの名無しさん2012/07/16(月) 21:45:56.11
ロッテ製品不買運動 韓国200万人の自営業者が

飲食店など韓国の自営業者が全国規模で、流通大手ロッテグループ製品の不買運動に乗り出した。

大型スーパーの進出で商圏を奪われ生き残りの危機に立たされているとし、コルモク(路地)商圏
生存消費者連盟と有権者市民運動が、酒類を扱う飲食店や宿泊業など小規模商工業者団体の
会員らとともに16日、不買運動を開始した。

これら団体は先月末、韓国チェーンストア協会に対し、大型スーパーの義務休業の順守やクレジット
カード手数料体系の改編受け入れなどを要求した。しかし成果が得られなかったことから、今月13日、
ロッテグループに闘争の意志を書面で伝えた。要求が受け入れられるまで無期限で不買運動を続ける。

ロッテグループのウイスキー「スコッチブルー」は国産ウイスキー市場で現在3位、焼酎「チョウムチョロム」
は「チャミスル」と激戦を繰り広げている。飲食店やカラオケ店でこれら酒類やミネラルウォーター、
清涼飲料が販売されなくなれば、ロッテは大きな打撃を受ける。

また、小規模商工業者側とその家族、市民団体を合わせた約600万人は、ロッテ百貨店やロッテマート、
ロッテスーパーなどの小売店を利用しないことにした。菓子類や氷菓、ハンバーガーなども不買運動の
対象とする。

さらに、外食分野などの小規模商工業者団体や市民団体にも、不買運動への協力を呼びかけている。
http://m.yna.co.kr/mob2/jp/contents_jp.jsp?cid=AJP20120716001400882&domain=6&ctype=A&site=0100000000&mobile

関連記事
韓国・ロッテ製菓など製造のアイスクリーム8種から基準値以上の細菌検出
http://news.livedoor.com/article/detail/6723748/

0414389です2012/07/17(火) 00:01:07.73
書き込める環境にいなかったので遅くなりましたが、>>390-392さんありがとうございます。

ダブルバッファリングを調べながら作ってみました。
ttp://blog.goo.ne.jp/masaki_goo_2006/e/d3c18365234ffb3383f5c30e32c83cf5
ここを参考に、
WM_CREATE→オフスクリーンのDC作成
WM_PAINT→オフスクリーンを表画面にコピー
動作確認の為に、WM_LBUTTONDOWN→描画する関数呼び出し
描画する関数→MoveToとLineToで線1本だけの処理

このように作ってみました。
しかし、初期は真っ白の表画面が、クリックすると真っ黒になってしまい、思ったような動作を確認することが出来ませんでした。
サンプルプログラムをほぼコピペしているのですが、どう言った原因なんでしょうか?
0415デフォルトの名無しさん2012/07/17(火) 00:09:24.37
コピペが原因では?
0416デフォルトの名無しさん2012/07/17(火) 00:36:25.00
どういった原因なんでしょうか、って言われても。w
コピペを理解しないままやってて必要な処理が抜けてるんだろ。でもそんなのこれだけの情報で分かるわけないだろが。

その練習用?のコードをどっかにあげてごらん。暇な人が教えてくれるから。
0417デフォルトの名無しさん2012/07/17(火) 01:49:40.52
http://codepad.org/ncRgqtgo
0418デフォルトの名無しさん2012/07/17(火) 01:50:03.43
いまどきGDIのダブルバッファリングって・・・
12,13年前はよくやったがな
0419デフォルトの名無しさん2012/07/17(火) 06:01:47.25
最近はBufferedPaintとか使うんかな
0420デフォルトの名無しさん2012/07/17(火) 07:42:24.38
前原さん「南北朝鮮の統一費用は日本も援助しますから安心してください。私も募金します」
http://engawa.2ch.net/test/read.cgi/poverty/1342475312/


統一費用準備で募金 前原氏

 韓国統一省によると、ソウル訪問中の民主党の前原誠司政調会長は16日、柳佑益統一相との会談の席
で、李明博政権が将来の南北統一に備えて設けた「統一勘定」の積み立てに協力するとして、柳氏に募金
を託した。募金額は不明。

 柳氏は「これは前原氏だけでなく日本国民の思いがこもったもの」と述べ、前原氏に感謝した。

 韓国政府は、20年後に南北が統一すれば最低55兆ウォン(約3兆8千億円)のコストがかかるとの試算
を受け、統一を意識し備える風潮をつくろうと統一勘定を設け、国民に募金を呼び掛けている。(共同)


ソース:MSN産経ニュース 2012.7.16 23:13
http://sankei.jp.msn.com/world/news/120716/kor12071623150005-n1.htm
0421デフォルトの名無しさん2012/07/17(火) 22:57:22.28
えらそうなことぬかしてたけど、けっきょくこたえれねーのかよw
0422デフォルトの名無しさん2012/07/17(火) 23:12:35.11
なんのこと?
0423デフォルトの名無しさん2012/07/17(火) 23:35:55.44
おのれのむねにてをあててかんがえてみたら、よろし
0424デフォルトの名無しさん2012/07/18(水) 00:13:20.06
ああ。あとは心優しいエスパーさんが相手してくれるよ。
0425389です2012/07/18(水) 00:27:55.82
>>414のWM_CREATEでオフスクリーンのDCを作成する時に、白で塗りつぶす(背景を白にする)ことによって、
初期の真っ白画面→右クリック→描画された画面
となることが確認出来ました。いらないと思って一部省いていた処理を追加することで出来ました。

まだ、ダブルバッファリングの下準備の確認が出来た程度で、本来のプログラムは手付かずですが、調べながら頑張っていきます。
また分からなくて詰まった時に質問するかもしれないので、その時はよろしくお願いします。
0426デフォルトの名無しさん2012/07/18(水) 09:03:42.13
【大赤字】 韓国万博にK-POPスターを呼んでも客が来ないため、チケット69円で投売り開始
http://engawa.2ch.net/test/read.cgi/poverty/1342528699/


麗水エキスポ:1000ウォンの深夜入場券発行へ

麗水エキスポの入場者数が目標を大幅に下回っていることを受け、
韓国政府は1000ウォン(約69円)の深夜入場券を発行することを決めた。
http://www.chosunonline.com/site/data/html_dir/2012/07/17/2012071701101.html


0427デフォルトの名無しさん2012/07/22(日) 00:48:28.12
先ほど誤って、↓の過疎ってるスレに質問投げてしまいました。
http://kohada.2ch.net/test/read.cgi/prog/1201041826/66

「export」キーワードが実装されたVC++のバージョンを教えてください。
0428デフォルトの名無しさん2012/07/22(日) 00:51:15.23
ありません
ちゃんとそのスレにここに書いた趣旨書いとけよ
0429デフォルトの名無しさん2012/07/22(日) 00:58:10.22
>>428
ありがとうございます。趣旨の件、了解です。
ところでないんですか?未実装な処理系って結構多いんでしょうか?
0430デフォルトの名無しさん2012/07/22(日) 02:33:15.38
>>429
イエス、ほとんどの処理系で実装されていない。
だから、2011年のC++の標準規格改定でexportの機能は廃止された。
0431デフォルトの名無しさん2012/07/22(日) 11:37:50.16
Galaxy S3の画面の”焼付き”を韓国メディアが検証!→24時間連続点灯で焼き付き、しかも戻らない
http://engawa.2ch.net/test/read.cgi/poverty/1342832178/

画面に残像が残る、いわゆる”焼付き現象”は今に始まったことではありませんが、Galaxy S IIIのマニュアルに記載されている「画
面劣化によるムラが発生した場合、サムスンは責任を負いません。」という一文(韓国版のみ?)が原因で、議論がいつもより激し
くなっているようです。サムスンはこの記述に対し謝罪し、内容の修正を行うとコメントしたそうです。

そうした中、Galaxy S IIIの焼付き現象について、韓国メディアのetnewsが検証を行いました。

検証に用いたのは、韓国版Galaxy S III LTEと、IPS液晶を搭載する「Optimus LTE II」。それぞれに白と黒のチェック柄を24時間連
続で表示させ続け、表示を元に戻した時の残像の様子を確認しました。
http://www.youtube.com/watch?v=OIqqnnb1LBw

結果、Galaxy S IIIでは、ホーム画面に戻った後にも、テスト用のチェック柄が画面に残りました。背景を青色にすると顕著です。一
方、液晶を採用するOptimus LTE IIでは画面の異常は確認できませんでした。

そしてその後12時間電源をOFFにし、再度確認してみても、残像は表示され続けたままでした。

焼き付きの原因は、AMOLEDで使われる赤、緑、青の発行体のそれぞれで寿命が異なることにあります。寿命が異なることで、同
じ時間発光させ続けることで、一部分だけが暗くなり、画面にムラが生じるというわけです。特に青は寿命が極端に短いとされてい
ます。

AMOLEDは高いコントラスト、応答性、構造的に薄くできるなど、液晶と比べて多くの利点もあります。しかし”寿命が短い”という欠
点も抱えているようです。今のところ根本的な解決は不可能で、寿命を延ばすことが最善策であるとされています。

しかし24時間でこうも簡単に焼き付くものなのですね。ここまで顕著な結果を望まなければ、あるいは数時間で焼付きを体験できる
かもしれません。しかも一度焼き付くと、元に戻すことはできません。

http://www.datacider.com/28903.php
http://www.datacider.com/wp-content/uploads/2012/07/galaxys3_barn.jpg
0432デフォルトの名無しさん2012/07/22(日) 17:57:44.16
http://www-higashi.ist.osaka-u.ac.jp/~k-maeda/vcpp/

みたいなHPってどうよ
ほかのページにも書いてあることをそのまま書いて自己満足してるだけじゃね?
車輪の再発明

この程度で、winプログラマなんて思ってるじゃないだろうねw
0433デフォルトの名無しさん2012/07/22(日) 18:07:40.54
プロジェクト名の変更の仕方を教えてください。

プロジェクト名にAbcとすると、
CAbcApp,CAbcView,CAbcDocクラスが作成されますが、
これのプロジェクト名をDefに変えたいのですがどうすればいいですか?
0434デフォルトの名無しさん2012/07/22(日) 18:49:55.10
こんな感じでやったことがあったようななかったような。
・事前に中間ファイルなど、なくてもいいファイルをすべて削除する
・ファイルやフォルダの名称を変更する
・grep置換が出来るテキストエディタで、プロジェクトフォルダ以下のすべてのファイルを全置換する
0435デフォルトの名無しさん2012/07/22(日) 19:11:58.57
CLSIDが重複するんですねわかります
0436デフォルトの名無しさん2012/07/22(日) 23:47:08.59
visualC++について質問です。
データグリッドビューを使ったプログラムなんですが、
入力したパラメータの大小でそのパラメータの入力されている
セルの背景色を変えるようなプログラムを組みたいのですが、どうしたらいいでしょうか?
0437デフォルトの名無しさん2012/07/22(日) 23:51:14.14
オーナードロー
0438デフォルトの名無しさん2012/07/23(月) 00:33:00.09
データグリッドビューって .net の?
だったら vc++ DataGridView セル 背景色 あたりでグーグル先生に聞いてくれ。(そっちの方が早い)

もし、アンマネージのグリッドのことでも、Microsft なんとかって最初から付いてたやつのことなら、普通に変えてたような気がするんだけど。
どっちか分からんのに調べるのもな。。。
環境はちゃんと書くようにしてくれ。
0439デフォルトの名無しさん2012/07/23(月) 00:35:16.02
あ。パラメータの値で背景色を自動的に変える方法を聞いてるのかな。
それは、、一から教えるのは勘弁。
自分なら入力値の変更イベントで勝手に色を変えるラッパークラスなりを作るだろうけど。
0440デフォルトの名無しさん2012/07/23(月) 00:43:28.62
>>438
スレタイを声に出して読んでみて
0441デフォルトの名無しさん2012/07/23(月) 01:04:13.93
ん? C++/CLI ってのもあるんだけれども。
0442デフォルトの名無しさん2012/07/23(月) 01:07:03.22
>>441
スレタイの 「を」 以降を声に出して読んでみて
0443デフォルトの名無しさん2012/07/23(月) 02:50:44.15
すみません、「を」までしか読んでいませんでした。
0444デフォルトの名無しさん2012/07/23(月) 04:50:56.38
馬鹿には無理
0445デフォルトの名無しさん2012/07/24(火) 17:55:09.70
朝鮮猿っていつまで経っても、結局日本の後追い猿真似しか出来ない寄生虫民族なんだよね
属国の歴史しか無くて、ずっと独自文化がゼロなのはなぜなのか本当に良く判るわw


  < #`Д´> <うぎゃああああ!!フランス人までネトウヨの嫌韓厨だったニダーーー!!!ネトウヨ!ネトウヨ!ネトウヨ!!


■フランスメディア「KPOPに独自性は感じられない」「日本や米国の模倣」「商業主義」「つまらない」

パリで韓流コンサート「日本文化から韓国を知った」
2011/06/14(火) 09:45

  一方、コンサートが終了した現在、当日の模様について報道しているフランスのメディアは
比較的少ない。この状況下、コンサートの模様を報じているのは、フランスのニュースサイト「Rue89」だ。

  中でも目立つのが、K−POPは特に独自性が感じられないという意見だ。これまでフランスでファン層を
増やしてきたJ−POP、ひいては米国のポップスを踏襲しており、商業主義的な音作りだという意見や、
演奏がコンピューター管理されているためか野性味に欠けるといった意見が寄せられている。

http://news.searchina.ne.jp/disp.cgi?y=2011&d=0614&f=national_0614_016.shtml
0446デフォルトの名無しさん2012/07/24(火) 19:18:30.86
shtmlまで読んだ
0447デフォルトの名無しさん2012/07/28(土) 09:12:38.31
win32apiでキーボード入力を使ったプログラムを作っています。(C言語)
使用するキーは、「0」〜「9」の数字キー、プラスマイナスを判定する「-」キー、少数点の「.」キー、決定の「Enter」キーです。
WndProc(ウィンドウプロシージャ)内のWM_KEYDOWNメッセージで押されたキーを認識してるのですが、
case WM_KEYDOWN:
if( wp == VK_RETURN ){
エンターキー処理;
} else if( wp == '0'){
「0」キー処理;
}

こんな感じで数字とエンターキーは認識出来たのですが、「 - 」「 . 」この2つが認識できませんでした。
「 - 」「 . 」この2つが押されたことを認識する方法を教えてください。

XP VC++6
0448デフォルトの名無しさん2012/07/28(土) 09:19:33.16
WM_CHAR じゃね
0449デフォルトの名無しさん2012/07/29(日) 15:38:09.00
これって解説したの?

うちとこでは WM_KEYDOWN の、

switch( wp ) {
case VK_SUBTRACT: // '-'
case VK_DECIMAL: // '.'
break;
}

で普通に行けたけど。
エンターキーとかが拾えてるなら、そこにブレークポイントを置いてキーを押してみればどんな値が来るか分かるじゃん。
分かったら例示にある VK_RETURN の「定義で移動」で定義元に飛んで、上で確認した値に該当する define 定義を見つけられるよ。
0450デフォルトの名無しさん2012/07/29(日) 15:38:36.41
上。
x 解説
o 解決
0451デフォルトの名無しさん2012/07/29(日) 15:44:29.60
自演乙としか
0452デフォルトの名無しさん2012/07/29(日) 20:12:47.40
そっか、自演をしちゃったのか自分は。w
0453デフォルトの名無しさん2012/08/02(木) 17:50:09.68
Visual C++で .Net Frameworkを使いたいのですが下記のようになってしまいます
どうやって使うのですか?

using namespace System;

int main()
{
return 0;
}

エラー
'System' : この名前を指定された名前空間は存在しません。

0454デフォルトの名無しさん2012/08/02(木) 17:55:33.04
>>453
ttp://eternalwindows.jp/unmanaged/host/host01.html
0455デフォルトの名無しさん2012/08/02(木) 19:17:26.38
>>454
ありがとうございました
0456デフォルトの名無しさん2012/08/07(火) 02:43:20.16
デバッグのやり方を教えてください。

C言語でシリアル通信を行ってデータの送受信を行おうと思っています。(Visual c++ 6のwin32api)
CreateFileやReadFile、WriteFileなどの関数を使って送受信をしようと思っています。
しかし、自分側のプログラムは(多分)出来たのですが、(通信)相手側がまだ完成していないので、
自分側のプログラムだけでも正しく動作してるのか確認(デバッグ)したいのです。
そこでPC2台を繋げて、自分のプログラムが通信(送信・受信)したいタイミングで、もう1台のPCからデータを送ったり、
受信した内容を確認したいのですが、どのように行えば良いでしょうか?
教授の助言では、teratermを使って・・・とのことですが。。。
teratermの使い方をいろいろ調べた結果、両方のPCでteratermを起動させ、A側で「a」を押すと、B側のteratermにaが表示される(その逆も)
くらいは出来たのですが、この方法を用いてVC6で作ったwin32apiの動作を確認する方法が分かりません。
0457デフォルトの名無しさん2012/08/07(火) 08:34:21.71
両方のPCでteratermを動かしてどうする
相手側のアプリの替わりにteratermを使うんだよ
0458デフォルトの名無しさん2012/08/07(火) 10:44:06.56
宿題は宿題スレって約束忘れちゃったのかおまえら
0459デフォルトの名無しさん2012/08/07(火) 21:09:11.54
てか、自分の側のプログラムは(一応)完成してるんだろ?
それをちっと弄って相手側の役割をするように変えてやればいいんじゃねーか?
0460デフォルトの名無しさん2012/08/15(水) 01:15:26.56
Visual C++ Express 2010で質問があります。

Windowsフォームアプリケーションを使用して、フォルダ作成プログラムを作ろうとしているのですが、
どうもうまくいきません。

フォームはテキストボックス、ボタンからなり、テキストボックスに文字列を入力し、ボタンを押すと
入力した文字列名でフォルダが作成されるというプログラムです。

書いたコードを以下のサイトに張り付けたので、どうすればうまくいくかご教示お願いします。

http://ideone.com/TWwHO
0461デフォルトの名無しさん2012/08/15(水) 01:56:41.54
>>460

using namespace System::Runtime::InteropServices;

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
System::String ^ str = this->textBox1->Text;
char* str1 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
_mkdir(str1);
}
0462デフォルトの名無しさん2012/08/15(水) 10:10:11.14
また、いばらの道に初心者が迷い込んだか
0463デフォルトの名無しさん2012/08/15(水) 10:19:51.11
なぜ初心者はC++/CLIなんて変態言語に手を出してしまうのだろう
0464デフォルトの名無しさん2012/08/15(水) 12:49:30.44
フォームアプリが選択肢に並んでるせいだな
0465デフォルトの名無しさん2012/08/15(水) 21:42:56.31
C/C++ -> MFC って来て、net に行こうとしたら C++/CLI に行きたくなるだろ、ふつう。
どんなトラップなんだと。w
0466デフォルトの名無しさん2012/08/16(木) 16:32:01.02
hash_map > 超えられない壁 > map
0467デフォルトの名無しさん2012/08/22(水) 18:02:31.68
VC++での開発初心者です。質問なのですが、
XMLファイルを読み込んで、配列かArrayListに格納するコードを書こうと思っています。
上記のようなことを行うにはどのような方法が簡単かつ適切でしょうか?
また、C#のようにXMLスキーマを用いて、データセットにXMLの値を格納する方法はC++でも可能でしょうか?
ぐぐっても半端な情報が散見するばかりで、少し途方に暮れています。
0468デフォルトの名無しさん2012/08/22(水) 18:19:07.00
https://sites.google.com/site/boostjp/tips/xml
0469デフォルトの名無しさん2012/08/22(水) 19:18:28.91
>>468
ありがとうございます。
ただ、Boost導入は難しい環境にて作成しております。(情報不足で申し訳ありません
Boostを使わずに実現する方法はないでしょうか?
0470デフォルトの名無しさん2012/08/22(水) 20:30:02.72
xmllite
0471デフォルトの名無しさん2012/08/23(木) 01:25:19.39
_CrtSetDbgFlagを使用すれば動的に確保されたメモリが解放されていない場合教えてくれるのですが
・DeleteObject
・DeleteDC
・ReleaceDC
・DestroyMenu
・FreeLibrary
・DragFinish
・FreeConsole
・GlobalUnlock
・ReleaseMutex
・CloseHandle
・etc
なども処理されて無い場合確認できるものが存在するのですか?
0472デフォルトの名無しさん2012/08/23(木) 01:33:38.73
しない
0473デフォルトの名無しさん2012/08/23(木) 17:51:53.90
そうだったんですね
ありがとうございました
0474デフォルトの名無しさん2012/08/26(日) 21:06:18.92
同じ実行ファイルを実行した時に
XP以前ならクラシックスタイル
XPならXPスタイル
VistaならVistaスタイル
7なら7スタイル
で表示するようにするにはどうすればいいですか?
それぞれ別の設定でビルドするしかないですか?
0475デフォルトの名無しさん2012/08/26(日) 21:52:41.14
GetVersionExでOSごとに描画を変える
0476デフォルトの名無しさん2012/08/26(日) 22:45:28.41
動的に確認できるんですね
ありがとうございました
0477デフォルトの名無しさん2012/08/26(日) 22:56:28.91
マニフェストファイルの以下の部分に指定した文字列は実行ファイルをメモ帳とかで開いた時しか見えませんか?
<assemblyIdentity
・・・
name="この部分"
・・・
/>
<description>この部分</description>
タスクマネージャのプロセスタブにある「説明」の欄に表示されたり
プロパティでは表示されないみたいですが
また別物なんですか?
0478デフォルトの名無しさん2012/08/26(日) 23:04:24.06
リソースのバージョンインフォじゃね
0479デフォルトの名無しさん2012/08/26(日) 23:42:01.08
ありがとうございます
内部で使用されるだけなんですね
0480デフォルトの名無しさん2012/08/27(月) 00:43:56.58
ビジュアルスタイルを適用するマニフェストファイルのprocessorArchitectureの値(x86)は
ソース上だと#defineで分岐するとビルド時のシステムに搭載されているCPUを気にしなくてもいいのですが
.xml上で自動で搭載されているCPUに合った値を使用する方法はありますか?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>

またOSによってビジュアルスタイルが変わると思うのですが
dllを読み込むのだからOSが使用できるビジュアルスタイルが自動的に描画される
という認識であってますか?
0481デフォルトの名無しさん2012/09/04(火) 01:45:17.53
質問です。VC++6.0でダイアログを作成しています。
ダイアログにはリストボックスがあり、スレッドの中でリストボックスにアイテムを追加したいと考えています。
MFCを使用しています。スレッドは_beginThreadで呼び出しています。

リストボックスのオブジェクトを取得するために以下のようにして取得をしたいと考えています。
CListBox* List = (CListBox*)GetDlgItem(リストボックスのID);
この処理はダイアログ::OnInitDialog()のような継承を行った部分の中では問題なく使用できるのを確認したのですが、
これを使ってスレッド内でオブジェクトを取得するにはどうしたらいいか悩んでいます。
スレッドは以下のような関数を呼び出しています。
void Thread(void* p){
  //処理
}
スレッドの中でリストボックスのオブジェクトを取得してリストボックスにアイテムを追加する方法の知恵を授けては頂けませんでしょうか
0482デフォルトの名無しさん2012/09/04(火) 01:47:56.44
スレッドにListを渡してやればいい
0483デフォルトの名無しさん2012/09/04(火) 02:05:55.94
>>482
なるほど
先にCListBox* List = (CListBox*)GetDlgItem(リストボックスのID);として
_beginThread(Thread,0,List);のように引数にListを渡すということでしょうか?
この考え方が間違ってたら申し訳ありません。
0484デフォルトの名無しさん2012/09/04(火) 02:10:28.96
はい
0485デフォルトの名無しさん2012/09/04(火) 02:21:04.38
スレッドの中でオブジェクトが取れなければ外で取ればいいじゃないということですね。
それだと複数引数で渡したい場合は構造体にでも入れて渡せば問題なさそうです。
回答ありがとうございます。非常に助かりました。
0486デフォルトの名無しさん2012/09/04(火) 21:56:06.00
もう解決したみたいだけど。
そもそもワーカースレッドの中で画面アイテムの更新て出来たっけ?

そう言う場合、リストボックスに入れるデータを格納したバッファなりを作って、スレッドではそこにデータを格納。
続けてウィンドウメッセージかなにかでウィンドウにメッセージを送ってメインスレッド(て言うんだっけ)でリストを更新、
て流れでいつも作ってた。
0487デフォルトの名無しさん2012/09/04(火) 22:20:13.57
内部ではSendMessageしてるから大丈夫
0488デフォルトの名無しさん2012/09/05(水) 11:30:23.73
教えて下さい!
Photoshop CS5のプラグインを作りたくて
Visual Studio 2010 Express (C++)をインストールして

次に、
PhotoshopCS5 SDK(forWindows)
ttp://www.adobe.com/devnet/photoshop/sdk.html
をダウンロード

試しにサンプルでもと思い。
「\adobe_photoshop_cs5_sdk_win\pluginsdk\samplecode\selection\selectoramashape\win」内の
「SelectoramaShape.vcproj」をダブルクリック!!

VS「変換ウィザードへようこそ」???→なんか知らんが、完了!
VS「変換中にエラーがあったよ」→閉じる。。。
ソリューションファイルからならイケる!(ってどっかのサイトに書いてあった)
VS「変換ウィザード。。。。

みたいな事になってます。

環境はWindows7で
変換レポートの中のエラーは
「Converting project file '***\SelectoramaShape.vcproj'Failed to upgrade platform 'x64'. Please make sure you have it installed under '%vctargetspath%\platforms\x64'
VCWebServiceProxyGeneratorTool is no longer supported. The tool has been removed from your project settings.
Attribute 'Detect64BitPortabilityProblems' of 'VCCLCompilerTool' is not supported in this version and has been removed during conversion.
Failed to upgrade 'Debug|x64'. Please make sure you have the corresponding platform installed under '%vctargetspath%\platforms\x64'
The project configuration dimension name/value "(Platform, Win32)" was not found in the project manifest.
プロジェクトはアップグレードに失敗しました。
」です。

お願いします。助けて下さい。
0489デフォルトの名無しさん2012/09/05(水) 11:51:15.84
>>488
環境は64bit?
そのVC++はSDK追加して64bitコンパイルできるようにしてる?
0490デフォルトの名無しさん2012/09/05(水) 11:54:32.79
あとちょっと見てみたけど、変換が入るのはこれがViisualStudio2008用だからだな。
2010用に書き換えるか、とりあえず2008で試してみては
0491sage2012/09/05(水) 12:07:50.84
>>489
>>490
なるほど。そういうことだったんですね。
ちょっと2008インスコしてきます。
2008も64bitコンパイルできるように設定しないとだめっすか?
0492デフォルトの名無しさん2012/09/05(水) 12:21:23.20
他のサンプルにx64入ってないやつあるからそれ試せばいいんじゃないか?
あとx64使えるようにするのは2008は面倒だよ。
そのエラーが出てプロジェクト開けないの?
開けてるならWin32のみ使えばいいんで問題ないと思うけど。
0493デフォルトの名無しさん2012/09/05(水) 12:49:22.38
>>492
あやうく2010消すとこでした。^^;
エラーが出てプロジェクトが開けないんです。
左のソリューションエクスプローラーに
・SelectoramaShape(利用不可)
 プロジェクト ファイルはアンロードされました。
みたいな感じで表示されてます。



0494デフォルトの名無しさん2012/09/05(水) 12:52:48.98
x64は最新のSDK入れれば使えるんじゃないか?
ググって試してみりゃいい。
あとvcprojをテキストエディタで開いてx64のブロック消すとか
0495デフォルトの名無しさん2012/09/05(水) 14:00:07.48
>>493
VC++2008で64bitでビルド実行できるようになって、その後2010で使いたいなら
2008を残したまま2010インストール
→2010で64bitビルド実行できるようにする(テストプログラムでも作って確認)
→2010でSelectoramaShape?のソリューションを開く
→ウィザード変換
→プロジェクトのプロパティ->構成プロパティ->全般->プラットフォーム ツールセットv90でリビルド
→エラー無し確認後v90をv100にしてリビルド
→エラー無し確認
これで以降はVC++2010のみで管理可能になると思う
0496デフォルトの名無しさん2012/09/05(水) 16:37:05.62
struct FOO{ int a; int *b; long c; char *d; };
__declspec(noinline) void __stdcall foo1(FOO h){
printf("%d %x %d %s", h.a, h.b, h.c, h.d);
}
__declspec(noinline) void __stdcall foo2(int a, int *b, long c, char *d){
printf("%d %x %d %s", a, b, c, d);
}
typedef void (__stdcall *FOO1)(FOO);
typedef void (__stdcall *FOO2)(int, void *, long, char *);
int _tmain(int argc, _TCHAR* argv[]){
FOO h = { 6, &h.a, 8, "abc", };
foo1(h);
((FOO1)foo2)(h);
foo2(h.a, h.b, h.c, h.d);
((FOO2)foo1)(h.a, h.b, h.c, h.d);
return 0;
}

最適化するとfoo2はfoo1と同じと見なされ、消えてしまいました。
しかし、呼び出し方は全く異なります。
foo2はpushで引数を入れていますが、
foo1はスタックポインタを進めて、全部movしていました。
するとfoo1は呼び出しコストが高くなるので
FOO2にキャストしてから呼んでみたところ
foo2と同じようにpushで引数を入れてくれました。
このような、引数と構造体の置き換えは、
アライメントが違ったり、浮動小数が入っていると
できない場合もあると思いますが、他にできないパターンが
あったら教えてください。
0497デフォルトの名無しさん2012/09/06(木) 04:13:40.82
>するとfoo1は呼び出しコストが高くなるので

え? 逆じゃないの?
プッシュはmuvより複雑で面倒な命令だから、実行時間が長くなるんじゃない?

試しに何回も呼び出しを繰り返させて実行時間を計ってみ?
0498デフォルトの名無しさん2012/09/06(木) 11:03:53.54
>>するとfoo1は呼び出しコストが高くなるので
>え? 逆じゃないの?
>プッシュはmuvより複雑で面倒な命令だから、実行時間が長くなるんじゃない?

すみません、おっしゃる通りでした。
以下のようにベンチしたところ、若干foo1呼び出しの方が速かったです。
http://ideone.com/2rTrd

コードが明らかに長くなるので、それだけ見て勘違いしておりました。

となると、サイズより速度を優先する最適化で、pushをmovに置き換える
コードが生成されないのはなぜですか?

また、((FOO1)foo2)(h);の行が入っていない場合、
foo2はfoo1に統合されませんでした。

しかも、関数自体はfoo1より、統合されないfoo2の方が速かったです。

謎だらけです。
0499デフォルトの名無しさん2012/09/06(木) 14:08:24.61
>>494
>>495
ありがとうございます。
なんとかできました。
できたはできたんですが、

自分が作りたかったプラグインはすでに存在してました orz
0500デフォルトの名無しさん2012/09/06(木) 15:42:04.15
構造体へのアクセスが単純変数へのアクセスよりも遅いって事だろ。

呼び出し時に構造体から変数に置き換えるか、関数内で置き換えるかの違いかと。
0501デフォルトの名無しさん2012/09/06(木) 15:59:16.26
えっ!?
0502デフォルトの名無しさん2012/09/06(木) 16:20:31.70
まあコンパイルは遅くなるかもなw
0503デフォルトの名無しさん2012/09/06(木) 21:38:56.41
構造体の変数を引数として渡して
関数内では構造体使わない方が速い

グローバル構造体宣言して使いまわすとか無しな
0504デフォルトの名無しさん2012/09/07(金) 14:46:45.00
質問ですが、VC++6.0にて
time_t time = time(NULL);
struct tm *ptime = localtime(&time);
として、YYYYMMやMM:DDのような書式にあわせた日付を取得する方法としてどのような方法があるのでしょうか?
YYYYと書式を設定したら2012、YYYY/MMと設定したら2012/09のようになるイメージです。

0505デフォルトの名無しさん2012/09/07(金) 16:52:48.33
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/strptime.3.html
0506デフォルトの名無しさん2012/09/07(金) 16:55:36.66
>504
つ ttp://msdn.microsoft.com/ja-jp/library/fe06s4ak%28v=vs.90%29.aspx
0507デフォルトの名無しさん2012/09/09(日) 04:03:06.58
どんな構成でプロジェクト作ってる?
フィルタの振り分けとか

Main
->main.cpp
->main.h

ProjectName
->ProjectName.cpp
->ProjectName.h

自作外部ファイル用
->FileName1.cpp
->FileName1.h
->etc

こんな感じ?
0508デフォルトの名無しさん2012/09/09(日) 13:41:30.09
そう
0509デフォルトの名無しさん2012/09/10(月) 09:34:58.52
遅れて申し訳ありません。規制に巻き込まれてしまいました。
>>505 >>506
こんな関数があったんですね。わざわざURLまで貼っていただいてありがとうございます。
■ このスレッドは過去ログ倉庫に格納されています