■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

★初心者にVisual C++を教えるスレ★ Part9
1 名前: ◆Manna2uCLg :03/11/16 20:53
Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。

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

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

2 名前: ◆Manna2uCLg :03/11/16 20:54
// 過去スレ
Part8 http://pc2.2ch.net/test/read.cgi/tech/1063029371/
Part7 http://pc2.2ch.net/tech/kako/1056/10562/1056280510.html
Part6 http://pc2.2ch.net/tech/kako/1052/10529/1052931903.html
Part5 http://pc2.2ch.net/tech/kako/1048/10486/1048698321.html
Part4 http://pc2.2ch.net/tech/kako/1044/10441/1044196393.html
Part3 http://pc2.2ch.net/tech/kako/1038/10381/1038160750.html
Part2 http://pc3.2ch.net/tech/kako/1030/10309/1030985362.html
Part1 http://pc3.2ch.net/tech/kako/1023/10235/1023530449.html

// 関連スレ
■ VisualC++(MFC限定)相談室 MFC9.dll■
http://pc2.2ch.net/test/read.cgi/tech/1062098350/
Win32API質問箱 Build14
http://pc2.2ch.net/test/read.cgi/tech/1065328397/
鬱だ氏のう DirectX (Part 10)
http://pc2.2ch.net/test/read.cgi/tech/1061420660/
C++相談室 part25
http://pc2.2ch.net/test/read.cgi/tech/1067949669/
私がC/C++の宿題を片づけてあげるわよ 15代目
http://pc2.2ch.net/test/read.cgi/tech/1068950713/

// 外部リンク
猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
MSDN ライブラリ
http://www.microsoft.com/japan/msdn/library/
Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
Google
http://www.google.co.jp/

3 名前: ◆Manna2uCLg :03/11/16 20:55
ぷららから、スレ立てできねぇから、ちと焦ったわ…

4 名前:デフォルトの名無しさん :03/11/16 21:14
お疲れ様〜〜〜。

5 名前:デフォルトの名無しさん :03/11/16 21:54
んーじゃあどうやってスレ立てたの

6 名前:デフォルトの名無しさん :03/11/16 22:13
//このスレの前身 VisualC++相談室 過去スレ
part 1 http://piza.2ch.net/tech/kako/970/970607517.html
part 2 http://piza.2ch.net/tech/kako/981/981630730.html
part 3 http://piza2.2ch.net/tech/kako/993/993186053.html
part 4 http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
part 5 http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
part 6 http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
part 7 http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
part 8 http://pc.2ch.net/tech/kako/1022/10224/1022499000.html
part 9 http://pc2.2ch.net/tech/kako/1036/10368/1036897197.html

7 名前:デフォルトの名無しさん :03/11/16 22:16
>>5
厨房はもう寝なさい

8 名前:デフォルトの名無しさん :03/11/16 23:05
うう・・・
前スレでCViewForm継承で、
ピクチャボックスを作って塗りつぶして表示するだけのコードができないと
書き込んだ者ですが、まだできません。
スクロールバーが表示されるまでウインドウを小さくして
スクロールバーを動かそうとするとどうしても不正終了になってしまいます。
一体どうすればいいのかお助けください。

9 名前:デフォルトの名無しさん :03/11/16 23:07
とりあえず、自分のOnPaintで他人に描画するのはやみれ

10 名前:8 :03/11/17 00:54
とりあえずピクチャボックスのみのときは解決しました。どうもです。

11 名前:デフォルトの名無しさん :03/11/18 00:27
Lineto、Ellipse等で線や円を描くとき,色の指定はどのように行うのでしょうか?
できるだけ簡単な方法を教えてください。

12 名前:デフォルトの名無しさん :03/11/18 03:14
CreatePen
SelectObject


13 名前:デフォルトの名無しさん :03/11/18 19:40
m_hWndであらわされたウィンドウを、タスクトレイに乗せようと思って、
次のようなコードを書いたんだ。
NOTIFYICONDATA nid;
nid.cbSize = sizeof( nid );
nid.hWnd   = m_hWnd;
nid.uID    = TASKTRAY_EVENT_ID;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.hIcon  = m_hIcon;
nid.uCallbackMessage = WM_MAIN;
strcpy( nid.szTip, "v(゚x゚)v" );
Shell_NotifyIcon( NIM_ADD, &nid );
そんで、見事タスクトレイに乗せることができたんだけど、
タスクトレイ上のアイコンを右クリックすると、
m_hWndのもってるメニューとタスクバーのメニューがどっちも出ちゃうことがあるのね。
どうしたら、期待しないタイミングでタスクバーメニューをださないようにできるかなぁ

14 名前:デフォルトの名無しさん :03/11/18 21:24
CFormView継承でウインドウのサイズ変更不可にするにはどうしたらいいのですか?
cs.style&=~WS_THICKFRME;
とやってもなんか駄目です。

15 名前:デフォルトの名無しさん :03/11/19 02:18
>>14
むしろWM_SIZEでスクロールバーがでないように
調整して下さい。

16 名前:デフォルトの名無しさん :03/11/19 02:41
>>14
定番のやり方。幅400高さ300に固定する例。
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
lpMMI->ptMinTrackSize.x = 400;
lpMMI->ptMinTrackSize.y = 300;

lpMMI->ptMaxTrackSize.x = 400;
lpMMI->ptMaxTrackSize.y = 300;

CFrameWnd::OnGetMinMaxInfo(lpMMI);
}


17 名前:14 :03/11/20 01:32
ありがとうございます。解決しました。
CFormViewって便利なようで何か使い勝手悪いですね。

18 名前:デフォルトの名無しさん :03/11/22 13:34
ステータスバーやツールバーを、
後で消したいと思ったらどこを設定すればいいですか?

19 名前:デフォルトの名無しさん :03/11/22 13:41
CMainFrameのOnCreate

20 名前:デフォルトの名無しさん :03/11/22 13:50
2点間の直線描画のプログラムを作成しているのですが、、
一つ目の点をA(xa,ya),B(xb,yb)として
while{xa!=xb || ya!=yb }
{
if(xa-xb) < 0 xa++; if(xa-xb) > 0 xa--;
if(ya-yb) < 0 ya++; if(ya-yb) > 0 ya--;
out[xa][ya]=1;
}
上のようなプログラムで直線を描くと出発点が曲がって、ひとつの直線に
できません。
滑らかな直線を描画すればどのようなアルゴリズムを用いればよいのでしょうか?



21 名前:20 :03/11/22 13:51
>上のようなプログラムで直線を描くと出発点が曲がって、ひとつの直線に
できません。

ひとつの直線→滑らかな直線
です、、すみません

22 名前:デフォルトの名無しさん :03/11/22 13:58
>>20
中学校で、関数って習わなかった?

23 名前:デフォルトの名無しさん :03/11/22 14:08
>>22
小学校で読み書きって習わなかった?


24 名前:デフォルトの名無しさん :03/11/22 14:13
HDC使うか、中学校の数学やり直せっと。

25 名前:デフォルトの名無しさん :03/11/22 14:16
>>20
素直にLineDDA使うのが吉

26 名前:20 :03/11/22 14:28
>>22
関数、、一応習ったはずですが、、
配列中にある入力画素中(0=白、1=黒)の2点を結ぶとしたら、
その二点から始点と傾きは導出できますが、その値を元に
直線を配列中に入れるのはどうすれば良いのでしょうか、、、アホで済みません
>>24
HDCとは何でしょうか?
>>25
LineDDAというのは関数でしょうか?

27 名前:デフォルトの名無しさん :03/11/22 14:33
>>26
MSDN嫁

28 名前:デフォルトの名無しさん :03/11/22 16:00
日本語が・・・
素朴な疑問なんだが、出発点って曲がるものなのか?
点に曲がるも曲がらないもないと思ってたんだが。

29 名前:デフォルトの名無しさん :03/11/22 17:16
出発点での微分係数が変化するってことじゃないの?

どうでもいいけど、なんか
CDC::
とか打っても関数リストが出てこなくなるときがあるのだけど
どういうことですか?

30 名前:デフォルトの名無しさん :03/11/22 17:24
>>29
6.0か?
拡張子が「ncb」のファイルを削除したら直る。

31 名前:デフォルトの名無しさん :03/11/22 17:47
連続的に書き込んでいってアニメーションさせたときのちらつきは
メモリデバイスコンテキストを使って解決したのですが、
ボタンなどのコントロールのちらつきを抑えることが出来ません。
どうすれば良いのですか?

32 名前:デフォルトの名無しさん :03/11/22 18:05
コントロールのハンドラの中でInvalidateRect(NULL,TRUE)になってない?
TRUEをFALSEにしないと・・・。
そんな単純な問題じゃないか。(´д`;;)

33 名前:31 :03/11/22 18:12
一応OnEraseBkgndでNULLを返しているのですが、
ボタンの部分だけちらつきます。
ボタンの部分は、一度消してから再描画しているような手応えなので
それってどうにかなりませんか?

34 名前:デフォルトの名無しさん :03/11/22 18:33
クリップスタイル

35 名前:デフォルトの名無しさん :03/11/22 18:55
すみません、ド厨なしつもんです。(´д`;;)モジモジ...
VC++6.0ソフトに添付のアスキー出版の
「VisualC++6.0プログラミング入門」のp87なんですが
CDC* pDC;
CWnd* pWnd;
pDC=pWnd->GetDC();
なんですが、OnDraw(CDC* pDC)内に次のように書いて
C〜View::OnDraw(CDC* pDC){

//↓TODO
CWnd* pWnd;
pDC=pWnd->GetDC();
}
ビルドすると
値が割り当てられていないローカルな変数 'pWnd' に対して参照が行われました。
と警告1がでます。どうしたもんでしょう。

36 名前:デフォルトの名無しさん :03/11/22 19:22
>>35
そのOnDrawの引数のpDCは書き換えてはいけないと思われ。
自分で用意した
CDC* pDC
なら別だが。

37 名前:デフォルトの名無しさん :03/11/22 19:36
>>36
ありがとうございます。>>35=(´д`;;)モジモジです。
pDCはOnDrawで用意されてるので、OnDraw内で書きませんでした。
分かりづらくてすみません。OnDraw全文を書くとこうです。
void C〜View::OnDraw(CDC* pDC){
CJIKKEN4Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CWnd* pWnd;
pDC=pWnd->GetDC();
}
これで
値が割り当てられていないローカルな変数 'pWnd' に対して参照が行われました。
と警告1がでます。

38 名前:デフォルトの名無しさん :03/11/22 20:16
Viewなんだから、pWndじゃなくてthis使ったらええやん。

39 名前:デフォルトの名無しさん :03/11/22 20:47
>>37
その警告のまんま。ポインタ(pWnd)が何も指して無い。

40 名前:デフォルトの名無しさん :03/11/22 20:49
CWnd* pWnd=・・・・

41 名前:デフォルトの名無しさん :03/11/22 20:49
>>37
何したいのか知らんが
CWnd* pWnd;
pDC=pWnd->GetDC();
の2文は消せ。

42 名前:デフォルトの名無しさん :03/11/22 20:51
簡単なHTTPプロクシを作っていて、winsockでlistenした後待機するにはどうしたらいいでしょうか?
とりあえずウィンドウを表示してGetMessageループで待つ方法では成功してるんですが、
理想はconsoleだけで構築したいのです。ご教授お願いします。

43 名前:デフォルトの名無しさん :03/11/22 20:55
>>42
>とりあえずウィンドウを表示してGetMessageループで待つ
ウィンドウを表示しなければいいだけじゃないのか?

44 名前:デフォルトの名無しさん :03/11/22 21:04
>>43
GETMESSAGEはウィンドウを作らなくても使える関数?なんでしょうか?
CをやるからにはあまりGUIを使いたくなくて。
consoleでイベントを得る為に待機する一般的な方法がわかれば自分で必死で調べるつもりなんですが。

45 名前:デフォルトの名無しさん :03/11/22 21:30
>>44
WaitForSingleObject()で待てばいいんでないかい?

46 名前:デフォルトの名無しさん :03/11/22 21:43
>>45
WaitForSingleObjectっていうとスレッド処理ですか?
やっぱスレッドですか、初心者には辛い…けど、やってみます。
ありがとうございました

47 名前:デフォルトの名無しさん :03/11/22 21:50
>>46
スレッド起こさなくても使えるよ。
#まじめに作るならスレッド起こした方が遥かに楽だと思うが。

48 名前:デフォルトの名無しさん :03/11/22 21:52
>>44
いや、ウィンドウを作っても表示しなけりゃいいんじゃないの、と

49 名前:デフォルトの名無しさん :03/11/22 21:59
>>47
ちなみにスレッドを起こさないで使う場合WaitForSingleObjectのhHandleには何を指定すればいいのでしょうか?甘えてすいません
>>48
現実的に言えばそうなんですけど(´・ω・`)
ごり押し的なプログラムじゃなくてできるだけ綺麗なソースを書きたかったもので。

50 名前:デフォルトの名無しさん :03/11/22 22:16
IRCサーバーのようなものを作りたいのですが
良いクラスライブラリありませんか?(普通のライブラリでも良いのですが・・・


51 名前:デフォルトの名無しさん :03/11/22 22:23
while(listen==0){
accept...
recv...
send...
}
でないの?listenをブロックさせれば。

52 名前:50 :03/11/22 22:29
>>51
複数の接続があって
それら個別に反応を返さないといけないので・・・
あと、MFCのクラスはWinsock1を使ってるみたいなので、1024以上のコネクションをするにはWinsock2を使わないといけない気もするんで…


53 名前:49 :03/11/22 22:42
とりあえずできた!
初心者なのでスレッドはひとまず宿題にしましたが

 while(WaitForSingleObject(NULL, INFINITE)){
 
 ・・・

 }

で待機できました!ありがとうございました!

54 名前:51 :03/11/22 22:59
あー、いや、42に言ったんだ。うん。
しかし、53をみると、getch()でOKだったかもしれないナ。

>50
真っ当に、1000クライアント以上をNT系で捌くなら、
Overlapped I/Oしか手はないはずだよ。
ttp://exe.adam.ne.jp/j/dice_tech_2.html
ttp://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html

55 名前:50 :03/11/22 23:01
>>54
サンクスです。
色々調べて見ます。

56 名前:デフォルトの名無しさん :03/11/22 23:23
>>49
> WaitForSingleObjectのhHandleには何を指定すればいいのでしょうか?

自分が何を待ちたいのかもわかっていないのか ?

>>53
> WaitForSingleObject(NULL, ...

やっぱりネタだったんだな...。

57 名前:デフォルトの名無しさん :03/11/23 02:41
アプリケーションの終了や、
右上の×ボタンを押したときに呼び出されるメッセージハンドラは
どこにあるんですか?

58 名前:デフォルトの名無しさん :03/11/23 02:51
>>57
CWinApp::ExitInstance();
CWnd::OnDestroy();

59 名前:デフォルトの名無しさん :03/11/23 12:09
#ifと#ifdefの違いはなんでしょうか?

60 名前:デフォルトの名無しさん :03/11/23 13:13
vc++で2chブラウザを作る時ネット関係はWININETで十分ですか?

61 名前:デフォルトの名無しさん :03/11/23 13:17
>>60
そんなもの必要ない。
WebBrowserコントロールを貼り付けるだけでOK。

62 名前:デフォルトの名無しさん :03/11/23 13:44
>>60
WinInetで十分。
WebBrowserコントロールを貼り付ける
だけじゃダメ。

63 名前:>>60 :03/11/23 13:59
>>62
アドバイスありがとうございます。
頑張ってみます

64 名前:>>60 :03/11/23 13:59
下げ忘れた・・・すいません

65 名前:31 :03/11/23 14:12
駄目です、なんかちらついてしまいます。
ボタンも再描画しているのが原因だと思うのですが、
ピクチャボックスだけ再描画するとかできませんか?

66 名前:>>60 :03/11/23 15:00
vc5で
#include <wininet.h>
すると膨大なエラーが出るんですがどうしたらいいのでしょうか?よろしくおねがいします

67 名前:デフォルトの名無しさん :03/11/23 15:06
wininetは事前にWindows.hとかwinsock.hとかのincludeを必要としている、
という可能性は有るような気がする。まあ、エラーが提示されないのでなんとも
いえないけれど。

68 名前:>>60 :03/11/23 15:29
>>67
>>wininetは事前にWindows.hとかwinsock.hとかのincludeを必要としている
詳しくはわからないのですが上のお言葉を元にINETの処理が書いてあるソースにincludeしたら動きました。
ありがとうございました

#エラーメッセージは100以上あったので書き込みませんでした、すいません

69 名前:>>60 :03/11/23 15:30
´Д`)また下げ忘れた・・・

70 名前:デフォルトの名無しさん :03/11/23 16:37
>>65
ボタンクリックのイベントハンドラ関数内を記述
もしくは
m_〜でDDX使ってるなら、その処理の記述
を晒して味噌。アドバがあるかもよ。

71 名前:65=31 :03/11/23 16:53
C・・Viewのメンバ変数に
CStatic *pict;
CButton *btn;
を入れてあげて、
OnInitialUpdateで
pict=new CStatic();
pict->Create(NULL,WS_VISIBLE|WS_BORDER|SS_WHITERECT|SS_BITMAP,
  CRect(0,0,100,100,this,ID_PICT);
cb=new CButton();
cb->Create("ボタン",WS_VISIBLE|BS_PUSHBUTTON,
  CRect(0,100,100,50),this,ID_BTN);
で表示。
ボタンのメッセージハンドラで
SetTimer(111,50,NULL);//(50msecおきにOnTimer()を呼び出す)
をしてやり、
OnTimer()でInvalidateRect(NULL,FALSE);を使ってOnDrawを呼び出し
OnDraw()内で
CDC *pictDC=pict->GetDC();
CDC mempictDC;//メモリデバイスコンテキスト
・・・
とかやりつつ描画しています。
CStaticの部分はちらつきを抑えられたのですが、
ボタンが激しくちらつきます。
もしかしてCStaticの部分だけ書き換えたいのに、
InvalidateRectを使うのはおかしいのでしょうか?
しかしどうやればいいのか分かりません。

72 名前:71 :03/11/23 16:55
cb=new CButton();
cb->Create("ボタン",WS_VISIBLE|BS_PUSHBUTTON,
  CRect(0,100,100,50),this,ID_BTN);
じゃなくて
btn=new CButton();
btn->Create("ボタン",WS_VISIBLE|BS_PUSHBUTTON,
  CRect(0,100,100,50),this,ID_BTN);
ですた。

73 名前:デフォルトの名無しさん :03/11/23 17:19
pict->Invalidate();

74 名前:71 :03/11/23 17:28
うあ〜〜なるほど!
InvalidateがCWndのメンバ関数だということを忘れていました。
というか自分アホですね。形式だけ真似て本質が見えない人間です。

75 名前:デフォルトの名無しさん :03/11/23 17:41
OnDrow内にも
cb->Create("ボタン",WS_VISIBLE|BS_PUSHBUTTON,
  CRect(0,100,100,50),this,ID_BTN);
のようなボタンの再描画入れてやったらどうなるの。
>>71のだと、Doc読み込みからViewに飛んできたOnInitialUpdateでしかボタンが描かれてない様けど。

76 名前:デフォルトの名無しさん :03/11/23 17:45
描画するたびにCreateする方がどうかと思うが。
ボタン貼り付けるくらいだからCFormViewの派生だろ?
ならOnInitialUpdateでいい。

77 名前:71 :03/11/23 17:59
>>75
自分も、再描画したときボタンが消えそうな気がして
OnDraw内にbtn->Create(・・)
とか入れたことがあったのですが、なんかおかしくなったので
InitialUpdate内にしたらうまくいきました。
さらに新規作成したときにも、再び作成されないようにチェックも入れました。
CWndは一度作って表示するとDeleteするまで消滅しないから
再描画する必要はないっぽいです。合ってますか?

78 名前:デフォルトの名無しさん :03/11/23 18:17
というか、普通、Formビューを使うなら、今回の例のように
再描画したいコントロールを個別にInvalidateしたりして、
ビュー自体のOnDrawはいじらないことが多いが・・・
本当にビュー自体を再描画する必要があるのか?
つまりビューのOnDrawをいじる必要があるのか?

仮に、本当にビューに何か(背景画像とか)を描画して、
その上にコントロールを乗せたいなら、
普通は背景に描画(OnEraseBkgndで描画)する。


79 名前:71 :03/11/23 18:43
うう・・・再描画したいコントロールを個別にInvalidateするって
例えばpict->Invalidate();でやるのですよね?
その描画処理の内部ってどこに描けば良いか分かりません・・・。
親ウインドウならOnDrawに書けばいいんですけど、
子ウインドウの場合は一般的にどうするのでしょうか?

80 名前:デフォルトの名無しさん :03/11/23 18:51
>>79
一般的にはCStaticの派生クラスの中のOnPaintなんかで描画。

でも、もう↓のような描画処理はできちゃってるみたいだから
OnTimerにでも書けば動くかも。

CDC *pictDC=pict->GetDC();
CDC mempictDC;//メモリデバイスコンテキスト
・・・
pict->Invalidate();



81 名前:デフォルトの名無しさん :03/11/23 19:11
過去ログを検索してみましたが解決できなかったので質問させていただきます。解決法をご存知の方がいらっしゃいましたら、ご教授お願い致します。

win98コンソールアプリで、SHIFT/ALT/CONSOLEキー押下の判定はどういった方法で実現できるでしょうか。(SHIFT+キーの判定ではなく、SHIFTキー単体の押下判定です。)
現在、GetAsyncKeyState()を使用していますが、下記のような状態となってしまいます。
<※1>アクティブ時 :キー押下判定されない 非アクティブな時:キー押下判定される
<※2>WINDOWS2000で同アプリを実行すると、コンソールアクティブ時でもキー押下判定される。
<※3>GetKeyAsyncStateの換わりにGetKeyStateを使用すると、どんなときでもキー押下判定されない。
<※4>使用している環境:VC++6.0

参考までに、現在テストとして作っているサンプルプログラムのソースを載せます。
(http://f1.aaacafe.ne.jp/~pointc/log249.htmlより抜粋したのですが「GetKeyState」→「GetAsyncKeyState」へ変更しております。)
ソース(test.cpp)------------------------------------------------
#include <windows.h>
#include <conio.h>
#include <stdio.h>

void main(void )
{
while(!kbhit()){
printf("Ctrl:%d Shift:%d Alt:%d\r",
(GetAsyncKeyState(VK_CONTROL) & 0x80000000)? 1 : 0,
(GetAsyncKeyState(VK_SHIFT) & 0x80000000)? 1 : 0,
(GetAsyncKeyState(VK_MENU) & 0x80000000)? 1 : 0);
}
getch();
}
------------------------------------------------------
ウィンドウズアプリにすれば解決するのかもしれませんが、コンソールアプリである必要があります。
大変申し訳ありませんが、ご助力の程宜しくお願い致します。

82 名前:81 :03/11/23 19:13
失礼いたしました。誤記がありました。
誤:win98コンソールアプリで、SHIFT/ALT/CONSOLEキー押下の判定はどういった方法で実現できるでしょうか。
正:win98コンソールアプリで、SHIFT/ALT/CTRLキー押下の判定はどういった方法で実現できるでしょうか。

よろしくおねがいします。m(_ _)m

83 名前:デフォルトの名無しさん :03/11/23 19:20
Win9Xのコンソールには、なんかややこしい制限が有ったと思う。
KB漁ってみ。

84 名前:デフォルトの名無しさん :03/11/23 20:03
WaveIn系の関数で録音するとき、音声の入力先はどうやって
指定するんでしょうか?プログラム側で操作する方法がわからず苦労してます。


85 名前:81 :03/11/23 20:13
ありがとうございます。
「ややこしい制限」ですか。。。調べてみます。

86 名前:デフォルトの名無しさん :03/11/23 20:31
0x80000000じゃなくて0x8000だにょ

87 名前:デフォルトの名無しさん :03/11/23 21:12
>>3
かわいそうに・・・。
本当はポーッとした子なのにこんなにハキハキ喋らされて・・・。
辛かっただろうな。


88 名前:デフォルトの名無しさん :03/11/24 09:30
>84
完全にWin32APIスレの範疇だと思うがまあいいか。

入力先デバイス、って意味じゃあないよな?これは簡単だし。
マイクとかCDとかラインインとか、の選択なら、ミキサーデバイスを扱う必要がある。

俺はめんどくさいので「ボリュームコントローラーを起動しる」としているが。

89 名前:デフォルトの名無しさん :03/11/24 11:33
>>88
ああ、やっぱりミキサーを使うしかないんですね。
あれさっぱりわかんないです。
情報も少ないし。
気長にやってみます。

90 名前:デフォルトの名無しさん :03/11/24 13:54
Winsock2.0でHTMLページを取得するプログラムを書いたのですが
"6e3" とか "fd4" といった文字列を受信することがあるのですが
これは何かの規格ですか?それともWinsockの仕様なのでしょうか?

91 名前:デフォルトの名無しさん :03/11/24 14:02
粋がってHTTP/1.1でリクエストを出さず、HTTP/1.0でリクエストしましょう。
それがいやなら、RFC2616くらい読め。キーワードはContent-Tranfer-
Encoding.

92 名前:デフォルトの名無しさん :03/11/24 14:53
>>91
調べてみます。ありがとうございました。

93 名前:デフォルトの名無しさん :03/11/25 00:18
CBitmapをCreateCompatibleBitmapしたとき、
最初の色がRGB(0,0,0)ですけどRGB(255,255,255)にできませんか?
まあ作った後塗りつぶせばいいだけですけど、
そのプロセスを省けないかなぁと。

94 名前:デフォルトの名無しさん :03/11/25 00:37
CBitmapの派生クラスを作るとかじゃいかんの?

95 名前:デフォルトの名無しさん :03/11/25 00:39
>>93
できません。

96 名前:デフォルトの名無しさん :03/11/25 01:08
DDB(デバイス依存ビットマップ)とは何でしょうか?
具体的には?


97 名前:計算式がまずい :03/11/25 01:31
はじめまして。
何が問題なのか教えていただけないでしょうか。

”1つのウインドウを生成し、ファイルからグラフィックを読み込み、画面内に収まるようにウインドウのサイズを調整し、画像をウインドウに貼り付ける”
プログラムを考えています。ところがデバッグすると、下記のプログラムのうち、計算式の1行
  MovePicW = BasePicW * (MovePicH / BasePicH);
の行で、ブレークポイントを設けてデバッグすると 
  MovePicW = 0  ←なぜか 933 にならない
BasePicW = 1000
MovePicH = 840
BasePicH = 900
という値になっています。

--------------------------------------------------
GetObject(hBit, sizeof (BITMAP), &bmBit);
int BasePicW = bmBit.bmWidth; //絵のヨコ [変化させない]
int BasePicH = bmBit.bmHeight; //絵のタテ [変化させない]
int MovePicW = bmBit.bmWidth; //絵のヨコ [後で変化する]
int MovePicH = bmBit.bmHeight; //絵のタテ [後で変化する]
int ScreenH = GetScreenHeight(); //画面のタテ

if (ScreenH < EPicH){ //画面のタテ < 絵のタテ
//絵のタテを画面のタテの長さにする
MovePicH = ScreenH;
//絵のヨコの縦横比率を合わせる
MovePicW = BasePicW * (MovePicH / BasePicH);
}
--------------------------------------------------
どうか 問題点を指摘、修正案をどうかよろしくお願いいたします。

98 名前:計算式がまずい :03/11/25 01:41
訂正です
if (ScreenH < EPicH){ //画面のタテ < 絵のタテ

if (ScreenH < BasePicH){ //画面のタテ < 絵のタテ


99 名前:デフォルトの名無しさん :03/11/25 01:48
Cからやり直した方がいいんじゃないか。
840/900の答えをintに入れたら0になるだろ。
その0と1000を掛けてるんだから当然0になる。

100 名前:計算式がまずい :03/11/25 03:18
>>99

なんとお恥ずかしい。。。 当然の結果ですね。でも助かりました。ありがとうございました。

101 名前:デフォルトの名無しさん :03/11/25 13:45
初心者丸出しですいません。質問させていただきたいのですが
vc5で
#include <iostream.h>

int main(void)
{
char *x00102;
x00102 = new char;
x00102 = "SSSSSSSSSSSSSSSSSSSSs\0";
cout << "\n";
cout << x00102;
delete x00102;
return 0;
}
を実行すると変なダイアログが出て強制終了?されてしまいます、何が原因なのでしょうか?
お願いします

102 名前:デフォルトの名無しさん :03/11/25 13:53
>x00102 = "SSSSSSSSSSSSSSSSSSSSs\0";
>delete x00102;

これが原因と思われ

103 名前:デフォルトの名無しさん :03/11/25 14:00
>>102
deleteのどこが問題なのか小一時間問いつめたい

104 名前:103 :03/11/25 14:02
すまぬ。かなり問題だ。
=で代入しているもんな。

105 名前:デフォルトの名無しさん :03/11/25 14:14
具体的にはどうすればいいんでしょうか?
char *x00102;
x00102 = new char;
strcpy(x00102, "555");
cout << x00102;
delete x00102;
return 0;
試しに上でやってみたんですがまたダイアログが出てしまいます

106 名前:103 :03/11/25 14:16
>>105
マジレスすると
x00102=new char[4];
delete []x00102;

107 名前:105 :03/11/25 14:18
ありがとうございます。数を指定していなかったのが悪かったのですね。解決しました。


108 名前:デフォルトの名無しさん :03/11/25 15:36
Microsoft Visual C++ 6.0でフルスクリーンのアプリを作りたいと
思っています。
MFCは使っても使わなくてもどちらでも構いません。
フルスクリーンと言うのはタスクバーも隠れている状態で、スクリー
ンセーバーのようなイメージです。
取っ掛かりのフルスクリーンを塗りつぶすにはどうすればよいのかで
悩んでいます。
例えば、ウインドウをフルスクリーンのサイズで指定して起動して、
メニュー等を非表示にするのか、見えないウインドウを作成して、フ
ルスクリーンの座標を塗りつぶすのか・・・
最終的にやりたい事はキーやマウスの全てのイベントを独り占めにし、
画面上に文字や画像を表示するといった事です。

109 名前:デフォルトの名無しさん :03/11/25 15:51
DirectXでも使ったら?そのためのAPIなんだし。

110 名前:デフォルトの名無しさん :03/11/25 16:11
>>108
普通はフルスクリーンサイズのウィンドウを作ると思う。

111 名前:デフォルトの名無しさん :03/11/25 16:52
VC++5で作っています

vector<char> x;

x.push_back((const char &)"test\0");
x.push_back((const char &)"テスト\0");

cout << (char)x[0];  //ここでは test と出力したい
cout << (char)x[1];  //ここでは テスト と出力したい

のようにソースを書いているのですが1行目は t しか表示されず2行目では何も表示されません
どのようにしたらよいでしょうか?ご教授お願いします。

112 名前:デフォルトの名無しさん :03/11/25 16:54
vector<string>

113 名前:デフォルトの名無しさん :03/11/25 16:55
>>111
おまえ>>101だろ。文字と文字列の違いがわかってないみたいだから
2chで質問する前に本読んで勉強すれ。

114 名前:デフォルトの名無しさん :03/11/25 16:57
>>112
それはやってみたのですが
・・・'type cast' : 'class std::basic_string<char,s・・・
なんたらかんたらのエラーが出て(キャストエラー?)動作しないんです。

115 名前:デフォルトの名無しさん :03/11/25 17:01
>>114
そらstringにcharキャストしてるからだろ。
いいからC++の入門書でも読めって。絶対その方が近道だから。

116 名前:デフォルトの名無しさん :03/11/25 17:03
>>109-110
ども。
DirectXですか。DirectXは一切知識がないのですが、調べて見ることにします。
結果、作成に時間がかかりそうならフルスクリーンサイズのウィンドウを作る方法で
やってみたいと思います。
ありがとうございました。

117 名前:デフォルトの名無しさん :03/11/25 17:10
>>113
文字列定数の最後に無意味な\0を書き加えているあたり、同じ人だと分かるよね。

118 名前:同じ人ですよ :03/11/25 17:15
>>115
ん、確かにそれはその通りなんで入門書は読める時に読みます。
でもなんとなくは掴んできたんすよ(・∀・)
ちなみにコンパイル時に膨大な警告がでるもののstringでうまくいきました。
ありがとうございました

119 名前:デフォルトの名無しさん :03/11/25 17:51
HtmlHelp関数をAPI関数として使用したいのですが、
実行時にCWnd::HtmlHelpとして認識されてしまいます。
HtmlHelp関数をAPI関数として使用するには
どうすれば良いでしょうか?
VC++.netです。

120 名前:デフォルトの名無しさん :03/11/25 17:53
::HtmlHelp()というわけか?

121 名前:119 :03/11/25 18:46
>>120
ありがとうございました。

122 名前:デフォルトの名無しさん :03/11/25 21:11
<鉄のおきて>

標準テンプレートは使ってはいけない。

理由。
・本心、俺が使えないから。
・表面、Linuxのg++ではなぜか<list>が使えなかったから。

よって
 全て自作これ最強、でも玄人以外お勧めできない。
 諸刃の剣。



123 名前:122 :03/11/25 21:12
VC++すれだったか・・すれ違いだった。
すまん。

PS.MFCなんておわっとる。


124 名前:デフォルトの名無しさん :03/11/25 23:22
unsigned char test[n] とかやって、
printf("%p",test); で出てくる値は、そのプログラムがメモリ上に配置されている場所の
先頭からのオフセット値と思っていいんでしょうか?

それとも、動的に割り当てられた部分(ヒープって言うんでしょうか?)はプログラム自体とは
全然離れているんでしょうか。
・・・メモリエディタで、自分が代入したのをこの目で見ないとどうも気が収まらなくて。(ノ∀`)

125 名前:デフォルトの名無しさん :03/11/25 23:39
>>124
そういうことを気にするなら、まずはOSがどのようにメモリ管理をしているのか調べるところから始めろ。
そうでないならそういうもんだと思っておけ。
#ま、VCならデバッガで見ればいろんなことがわかるだろうがな。

126 名前:デフォルトの名無しさん :03/11/26 07:41
メッセージボックスが表示中の時にも
こちら側で何か作業をしたいのですが、
どうすれば良いでしょうか?

VC++.netでMFC、
メッセージボックスは、MB_APPLMODAL様式です。

127 名前:デフォルトの名無しさん :03/11/26 07:54
>>126
マルチスレッドを使う。

128 名前:デフォルトの名無しさん :03/11/26 09:26
マルチスレッドに関してのサイトや良書を紹介願えませんか?

129 名前:デフォルトの名無しさん :03/11/26 12:14
検索すればたくさん出ると思うが・・・・・・一応
ttp://www.google.co.jp/search?q=%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89&ie=UTF-8&oe=UTF-8&hl=ja&lr=


130 名前:デフォルトの名無しさん :03/11/26 13:52
すみません。初心者というかそれ以前の問題なんですけどC++のプログラムを実行できません
誰かご教授していただけませんか?

131 名前:デフォルトの名無しさん :03/11/26 14:28
>>130
個人教授は、あなたが妙齢の麗しい女性であった場合にのみ、受け付けます。
教授料は肉体関係で、交通費は別途、現金にて。

132 名前:デフォルトの名無しさん :03/11/26 16:01
プロジェクト名 ”test” SDI形式のプロジェクトを作成しました。

ここで、クラスビューから見える"CtestView"から、CbitmapViewを派生させたいのですが、

プロジェクト→クラスの追加→MFC と行っても、基本クラスには、CtestViewは見付かりません

ドウシタラ宜しいのでしょうか?

ちなみにバージョンは VC++.net2002 standard です。 

133 名前:132 :03/11/26 16:37
手書きで、ごりごりかいてたら出来たので.........

すいません。

134 名前:デフォルトの名無しさん :03/11/26 17:20
サービスプログラムで、ネットワークフォルダに書き込めないんだが。なんでやねん。

135 名前:デフォルトの名無しさん :03/11/26 17:33
”書込み禁止だった”とか

136 名前:デフォルトの名無しさん :03/11/26 17:48
>>134
ローカルシステムアカウントだと権限ないよ。

137 名前:デフォルトの名無しさん :03/11/26 17:50
VC.NET 2003 standardでも、/LTCG ビルドオプションをつけると、
コードはちょっとくらい最適化されますか?

138 名前:デフォルトの名無しさん :03/11/26 19:37
windowsのエクスプローラって凄いソフトなんですか?
同等のものは作れないと言う人が結構多いような
感じですけど。
作るのはとてつもなく大変なんですかね?

139 名前:デフォルトの名無しさん :03/11/26 21:02
うん。昔のファイルマネージャくらいなら
なんとかなるけどエクスプローラになると
面倒そうだね。



140 名前:デフォルトの名無しさん :03/11/26 21:23
/OPT:NOWIN98

141 名前:デフォルトの名無しさん :03/11/26 21:30
トウラトウサケ

142 名前:デフォルトの名無しさん :03/11/26 22:36
CDialogの派生クラスでGetDocument()が効かないのですが、
CDialogクラスの派生クラスで、CDocumentクラスの派生クラスのオブジェクト得るにはどうしたら良いでしょうか。


143 名前:デフォルトの名無しさん :03/11/26 23:20
>>142
自分で作る。

144 名前:デフォルトの名無しさん :03/11/26 23:26
>>143
無理だぽぽぽぽ。

145 名前:デフォルトの名無しさん :03/11/26 23:43
VC++で関数の仕様が書いてあるドキュメントはないですか?
プログラミング中にあんな事したいなぁと思った時に見たいんですが

146 名前:デフォルトの名無しさん :03/11/26 23:43
MSDN

147 名前:デフォルトの名無しさん :03/11/26 23:44
>>146
なんですかそれ?

148 名前:デフォルトの名無しさん :03/11/26 23:45
>>147
MSDN

149 名前:デフォルトの名無しさん :03/11/26 23:46
割れか。ほっとけ。

150 名前:デフォルトの名無しさん :03/11/26 23:49
>>147
パッケージの中に入っているCDROM全部さがしてみなはれ

151 名前:デフォルトの名無しさん :03/11/27 00:45
>>136
ちがうWorkGroupのサーバの共有フォルダに書き込みたいんだけども、
するってぇと、相手先のWorkGroupのユーザアカウントで入らんと駄目ってこと?

つーか、WorkGroup管理のユーザって、自PCに(サービスプログラムの実行アカウントで)登録できたっけか。。?



152 名前:136 :03/11/27 00:53
その通り。
アクセス権のあるユーザーでサービスにログオンさせればOKだよ。

153 名前:デフォルトの名無しさん :03/11/27 01:04
>>138
シェルのいじり方わかってれば作れると思うけど

154 名前:デフォルトの名無しさん :03/11/27 02:42
liboctave コンパイルして VSからつかいたいんだけど。
うまくいかない。
http://vision.kuee.kyoto-u.ac.jp/~nob/doc/liboctave/liboctave.html
配布してくれてるビルドバイナリも駄目だといってるg77なんだもんな。
FreeBSDだと簡単だったのによ。。。
使ってるひと居る?

155 名前:デフォルトの名無しさん :03/11/27 04:08
#define ID_COMBOBOX 300
int Key;

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){
 LPARAM szCombo[2] = {(LPARAM)"AA", (LPARAM)"BB"};
 switch(msg){
  case WM_CREATE:
   hCombobox = CreateWindow("COMBOBOX", "",
     WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | CBS_HASSTRINGS,
     620, 110, 140, 75, hWnd, (HMENU)ID_COMBOBOX, hInst, NULL);
   SendMessage(hCombobox, CB_INSERTSTRING, (WPARAM)0, szCombo[0]);
   SendMessage(hCombobox, CB_INSERTSTRING, (WPARAM)1, szCombo[1]);
   SendMessage(hCombobox, CB_SETCURSEL, (WPARAM)KeyCombobox, 0);
  case WM_COMMAND:
   switch(LOWORD(wp)){
    case ID_COMBOBOX:
     if(HIWORD(wp) == CBN_SELENDOK)
      Key = SendMessage(hCombobox,CB_FINDSTRING,0,0);
    break;
   }
   break;
  default:
   return (DefWindowProc(hWnd, msg, wp, lp));
 }
 return 0;
}

コンボボックスを作ってインデックスを取得したいと思っています.
Key に入る数字が szCombo[0], szCombo[1] のどちらを選択しても, 0 が入ってしまいます…(´・ω・`).
VC++6.0 を使ってるのですが、どなたか教えてください. お願いします.

156 名前:155 :03/11/27 04:10
すいません, 書き間違えです.
誤) SendMessage(hCombobox, CB_SETCURSEL, (WPARAM)KeyCombobox, 0);
正) SendMessage(hCombobox, CB_SETCURSEL, 0, 0);

157 名前:デフォルトの名無しさん :03/11/27 04:32
どの部分がインデックスを取得してるコードだゴルァ

158 名前:155 :03/11/27 04:44
すみません. 文字取得できるかの実験中に貼り付けてしまいました….
CB_GETCURSEL を使ってインデックス取得しようとしているのですが,
Key に入る数字は 0 なんです….

case WM_COMMAND:
 switch(LOWORD(wp)){
  case ID_COMBOBOX:
   if(HIWORD(wp) == CBN_SELENDOK)
    Key = SendMessage(hCombobox,CB_GETCURSEL,0,0);
  break;
 }
 return 0;
}

159 名前:デフォルトの名無しさん :03/11/27 05:05
LPARAM szCombo[2] = {(LPARAM)"AA", (LPARAM)"BB"};

static LPARAM szCombo[2] = {(LPARAM)"AA", (LPARAM)"BB"};
にするとか?

160 名前:155 :03/11/27 05:17
>>159 駄目でした…. やっぱり Key=0 が入ってしまいます….
考えていただいたのに, すみません.

case WM_COMMAND:
 switch(LOWORD(wp)){
  case ID_COMBOBOX:
   if(HIWORD(wp) == CBN_SELENDOK){
    MessageBox(hWnd, "(´・ω・`)", "(´・ω・`)", MB_OK | MB_ICONEXCLAMATION);
    Key = SendMessage(hCombobox,CB_GETCURSEL,0,0);
   }
  break;
 }
 return 0;
}

と変えて, コンボボックスの項目を変えると警告ウィンドウは表示されるので,
コンボボックス周辺のプログラムは間違えていないと思うのですが….
わかる方, よろしくお願いします.

161 名前:デフォルトの名無しさん :03/11/27 07:16
>>160
CBN_SELCHANGE だとどうなりますか?

162 名前:デフォルトの名無しさん :03/11/27 08:03
>>147
(  ゚,_ゝ゚)バカジャネーノ

163 名前:デフォルトの名無しさん :03/11/27 08:38
>>160
hComboboxはauto変数じゃダメポだけど、それじゃないのかなぁとかオモタ。

164 名前:142 :03/11/27 12:15
>>142に関してですけど、
C〜Dlg dlgをViewに作って、
viewでdlg.〜でdlgのオブジェクト取得して、GetDocument()でdocのオブジェクト取得して、
view内でdlgとdocをつなげることにしました。
話は変わるのですが、ラジオボタンからGetDlgItemでボタン状態を取得できますが、
逆にdlg閉じるときのラジオボタンへの入力は何の関数使えばよいでしょか。
ちなみに、5個くらいでラジオボタンのグループ組んでるのでm_〜がグループの先頭のだけしかつくれず、m_〜は使えない状態です。

165 名前:164 :03/11/27 12:27
すいません、追記します。
「逆にdlg閉じるときのラジオボタンへの入力何の関数」は
ダイアログボックス閉じるときの.cppからラジオボタンへの入力の関数のことです。
ラジオボタンの状態の保存といいますか・・・。

166 名前:155 :03/11/27 13:45
>>161 CBN_SELENDOK でも変わりませんでした.
>>163 訂正してみたところ、以下のように怒られる羽目に….
訂正前) static HWND hCombobox;
訂正後) HWND hCombobox;
エラー) 値が割り当てられていないローカルな変数 'hCombobox' に対して参照が行われました
「猫でもわかるプログラミング」はstaticで置いてたから大丈夫かと思ったのですが.

ソースを置いてみたので, お時間の空いている方, お願いします.
けっこう長いんですけど….
http://www.balbal.net/program.zip

167 名前:デフォルトの名無しさん :03/11/27 15:26
SendMessage(CBN_SELCHANGE) の戻り値は Index じゃないと思うけど。
つーか、調べてみたら、No return value. らしいぞ。
http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/comboboxes/comboboxreference/comboboxmessages/cbn_selchange.asp

CBN_SELCHANGE で 「変更しますた」 という通知を受け取ったら、
じゃぁ、今選択してるの何よ? ってことで、CB_GETCURSEL 送って、
index を取得するようにしたらえぇんちゃう?


168 名前:155 :03/11/27 15:57
>>167 すいません, また誤字状態でアップしてしまいました….
お時間戴いたのに, 本当に申し訳ないです.

//WinBT.cpp内容
144 static HWND hCombobox; //static外すとエラーが出るので, staticつけたままです
166 switch(msg){
167 case WM_CREATE:
198  hCombobox = CreateWindow("COMBOBOX", "", //コンボボックスの定義
199    WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | CBS_HASSTRINGS,
200    620, 110, 140, 75, hWnd, (HMENU)ID_COMBOBOX, hInst, NULL);
201  SendMessage(hCombobox, CB_INSERTSTRING, (WPARAM)0, szCombo[0]);
202  SendMessage(hCombobox, CB_INSERTSTRING, (WPARAM)1, szCombo[1]);
203  SendMessage(hCombobox, CB_SETCURSEL, 0, 0);
231 case WM_COMMAND:
232 switch(LOWORD(wp)){
255  case ID_COMBOBOX:
256   if(HIWORD(wp) == CBN_SELENDOK){  //CBN_SELCHANGEでも同じでした
257    KeyCombobox = SendMessage(hCombobox, CB_GETCURSEL, 0, 0); //Index取得
262  break;
//以下略

「猫でもわかる…」「MSDN」や他のサイトでもこんな感じになっているので大丈夫かと思っていたのですが….
あと, 再度上の状態にしたものをアップしたので, お願いします.
http://www.balbal.net/program.zip
参考にしたのがMSDNのCB_GETCURSELページです.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/comboboxes/comboboxreference/comboboxmessages/cb_getcursel.asp

169 名前:デフォルトの名無しさん :03/11/27 15:59
コンパイルして実行したら下記エラーが出たぞ。

Run-Time Check Failure #2 - Stack around the variable 'cs' was corrupted.

デバックするきないので、がんばれやー。

所で、俺は古い人間なので最近の傾向は知らないが。
ヘッダーファイルに関数入れるのは普通?
クラスファイルやテンプレートは理解できるが、古い人間としては、
巨大なヘッダーファイルには違和感ありあり^^;
(クラス多発すると巨大になるんだよな・・・・・;;)

170 名前:デフォルトの名無しさん :03/11/27 16:06
>>169
家のVC++6.0だと何もエラーでなかったよ。ちなみにOS==糞ME。
>>166http://www.balbal.net/program.zip
をやってみて

case ID_COMBOBOX:
if(HIWORD(wp) == CBN_SELENDOK){
KeyCombobox =SendMessage(hCombobox,CBN_SELCHANGE,0,0);
/*停止
if(KeyCombobox == 1)
停止*/
MessageBox(hWnd, szWarn1, szWarn, MB_OK | MB_ICONEXCLAMATION);
}
InvalidateRect(hWnd, NULL, TRUE);
break;
とやってみてif(KeyCombobox == 1)
を止めたら、combobox出たから、どうやら
>>167が言ってるように
KeyCombobox =SendMessage(hCombobox,CBN_SELCHANGE,0,0);
がおかしいみたいだよ。


171 名前:デフォルトの名無しさん :03/11/27 16:20
>>169 もうちょっと試行錯誤してみます….
>>170 >>168にて改善してみたのですが…. 駄目でしょうか?

>>157,159,161,163,167,169,170さん, 相談乗っていただき, ありがとうございました.
もうちょっと1人でVC++と格闘してみます…(´・ω・`)

172 名前:デフォルトの名無しさん :03/11/27 16:24
>>170 同じくエラー、VC++.2003+w2000Proの環境違い?

173 名前:デフォルトの名無しさん :03/11/27 16:39
デバックしてしまったーー;
348行
×char cs[1];
○char cs[100];

174 名前:155 :03/11/27 16:43
>>172
今, ファイルをダウンロードしたら中身壊れてたので, 再度アップしなおしてみました.
環境は Win2000Pro + VC++6 でやってます.

KeyCombobox =SendMessage(hCombobox,CB_GETCOUNT,0,0);

とやっても, KeyComboboxには 0 しか入らないので,
たぶんコンボボックス周辺がおかしいのかなぁと思ってるのですが,,,
もうちょっと, がんがてみます(`・ω・´)!!

175 名前:155 :03/11/27 16:50
>>173 デバッグまでしていただき, ありがとうございます.

348 char cs[100];
349 sprintf(cs, "%d", KeyCombobox);
350 TextOut(hdc, 620, 400, cs, 100);

上は KeyCombobox がどう変化しているか見ているために書いたのですが,
cs[100] でも cs[10] でも同じ結果になります.
根本的に何か間違えてるのかなぁ…(´・ω・`)

176 名前:デフォルトの名無しさん :03/11/27 16:53
VC5とVC7でビルドしたプログラムが、VC7の方で顕著に遅くなるんですが、
パフォーマンス問題解消のポイントはありますか?

具体的には、ファイルから読み込んだデータを整理し、ListCtrlに表示していく
というプログラムです。両者でコードの中身はほぼ同じです。型の問題など
の出るところだけちょこっと直してあるだけです。

例えば、VC5の方で20秒かかる処理が、VC7の方で25秒くらいになります。

VC5LearningEd
VC.netSTD
win2k

177 名前:155 :03/11/27 16:55
すいません, 自己解決しました.

144行目
訂正前) static HWND hCombobox;
訂正後) static HWND hCombobox = NULL;

にしたら, 何故かできました.

>>157,159,161,163,167,169,170,172,173さん、本当にありがとうございました…つД`)

178 名前:デフォルトの名無しさん :03/11/27 16:59
ちなみに修正後こちらでは
KeyCombobox =SendMessage(hCombobox,CB_GETCOUNT,0,0);
で0,1が正しくはいっている。処理見てないのでわからんが。
ちなみに。1のときダイアログが出る。
0のときは何やら黒丸が出る。

179 名前:デフォルトの名無しさん :03/11/27 17:00
おめでとーーーーー178ね

180 名前:デフォルトの名無しさん :03/11/27 17:05
今すこし見たけど、それでうまくいくなら、何処かメモリーリークしてないか?
一応見てみて、他のトラブルもある可能性が・・・・
さっきののところのリークなら良いけど

181 名前:155 :03/11/27 17:06
>>178-179 ありがとうございます.
漏れも皆さんのように教えるレベルになるようがんがります !!(`・ω・´)!!

182 名前:デフォルトの名無しさん :03/11/27 17:10
気付いたんだが、
WM_CREATE で CreateWindow("COMBOBOX"); の戻り値を hCombobox に入れてるわけですが、
いざ SendMessage(hCombobox, CB_GETCURSEL, 0, 0) しようとしたとき、
hCombobox の値が変わってるぞ… すくなからずうちの環境(Win2k VC6)では…

つーか、ソースもうちっと綺麗に書いてみては?
そうしないと、バグも見つからんと思うぞ…


183 名前:デフォルトの名無しさん :03/11/27 17:16
ソース公開すると大変だけど、いい勉強になるな、がんばれやーーー

184 名前:155 :03/11/27 17:16
>>180
40行目を以下のように訂正したところ, 大丈夫になりました.
訂正前) int KeyCombobox;
訂正後) int KeyCombobox = 0;

>>180さんのメモリーリークは DestroyWindow か delete し忘れかな….
今から探ってみます.

>>182
初めてSDK触ってみたのですが, 思ったより行数が多くて…つД`)
今後ソースを綺麗に書く努力します.

185 名前:182 :03/11/27 17:16
追伸だが、

 :
 :
if(!::IsWindow(hCombobox))
 ::MessageBox(NULL, "ハンドル不正…", NULL, MB_OK);
SendMessage(hCombobox, CB_GETCURSEL, 0, 0);
 :
 :

と書いとくと、案の定怒られるぞ。

186 名前:Javaからの転入初心者 :03/11/27 20:50
すみません。基本的なことなんですけど、
CObList olist;
for (int i=0; i<10; i++) {
olist.AddTail((CObject*)new A("str", i));
}

これだと問題なく、olistから取り出すことができて、
for (int i=0; i<10; i++) {
A a;
a.s = "str";
a.i =i;
olist.AddTail((CObject*)&a);
}
とすると、正しく取り出せないのはなぜでしょうか。
ちなみにAクラスはCStringとintのメンバーを持っているだけです。
最初の3行を
A* a = new A("str", i);
とすると、olistから取り出してアクセスするときに例外となります。
どなたかお願いします。
javaだといずれも問題ないんだけど。


187 名前:デフォルトの名無しさん :03/11/27 20:57
>すみません。基本的なことなんですけど、
確かに基本的なことだが、まずどうして基本的だと判断したのか理由を述べよ。

188 名前:デフォルトの名無しさん :03/11/27 21:00
>>186
変数のスコープというか、生存期限

189 名前:Javaからの転入初心者 :03/11/27 21:41
>>187
回答ありがとうございます。オブジェクトに対するポインタに関係する
事柄で、おそらく上級者にとっては基本的なことだと思いましたので。

190 名前:灯台離散 ◆777zZZSC5A :03/11/27 21:54
質問があります。

データ型とフォーマット指定子なんですが、
char, unsigned char, signed char は、全部 %c ですか?

191 名前:デフォルトの名無しさん :03/11/27 22:25
char型と%cの書式指定に関連性はない。
たまたま%cで出力したい物がchar型に入っていることが多いだけの話。

192 名前:灯台離散 ◆777zZZSC5A :03/11/27 22:58
了解しました。ありがとうございます。

193 名前:デフォルトの名無しさん :03/11/27 23:18
>>184
352 for(n = 0; n <= MaxPath; n++){
357 for(n = 0; n <= MaxBridge; n++){
430 for(n = 0; n <= MaxPath; n++) delete path[n];
431 for(n = 0; n <= MaxBridge; n++) delete bridge[n];

ループしすぎ
hComboboxの値が変わっていたのはそのせい

あと、case WM_TIMER:はbreakなり、returnなりで抜けてないので、
次のcase WM_COMMAND:の処理も行っている。
今の所問題ないけど、ここも修正した方が良い

194 名前:デフォルトの名無しさん :03/11/27 23:44
>>190
フォーマット指定子と一括りにするのは止めろ。
printf()系とscanf()系のそれはその思想がかなり違う。

195 名前:Javaからの転入初心者 :03/11/27 23:55
Java経験者がVCを学ぶのにいい方法、押さえておくポイントはあるでしょうか。
つくづく、Javaが簡単に思えます。慣れの問題でしょうか。

196 名前:デフォルトの名無しさん :03/11/28 00:38
>>195
まずC(C++)を覚えろ。
話はそれからだ!

197 名前:Javaからの転入初心者 :03/11/28 01:10
Cは経験済みです。
C++も入門書は押さえました。


198 名前:デフォルトの名無しさん :03/11/28 02:18
console画面の最後の行だけを消すなんて事はできるのでしょうか?

199 名前:155 :03/11/28 02:39
>>193 ループしすぎで hCombobox の値が変わるなんて事あるんですか?
初めて知りました….
コードの勉強だけでなく, 中身ももっと勉強せねば….
そしてバグのご指摘どうもです.
言われて気づきました…. 本当にありがとうございます.

200 名前:デフォルトの名無しさん :03/11/28 04:21
VisualC++でMFCをつかいSDIソフトを作ってるんですが、
2chブラウザのようなしおり機能をつけるにはどうすればよいのでしょう?


ようするにスクロールしなければいけないドキュメントがビューに表示されている場合
好きな部分がフレーム内に表示されるようにソフト側で操作するにはどうすればよいのでしょう?

201 名前:デフォルトの名無しさん :03/11/28 06:27
>>195
Javaの方が簡単だと思う固定観念を捨てなさい。
Javaなんて、ポインタを見せないようにしただけなんだから。

202 名前:デフォルトの名無しさん :03/11/28 08:32
>>197
入門書を抑えた程度じゃまだまだだな。

203 名前:Javaからの転入初心者 :03/11/28 08:35
で、すみません。どなたか
>>186
の問題、詳しく教えていただけないでしょうか。
ここを読めとか言うのでもOKです。


204 名前:デフォルトの名無しさん :03/11/28 09:16
>>203
>>188で回答が得られている。

205 名前:デフォルトの名無しさん :03/11/28 15:20
リソースの追加でBitmapを追加したいのですが、
「リソースの追加→Bitmap→インポート」
の手順で追加すると何故かそのBitmapファイルのアイコンがリソースのアイコンの箇所にインポートされてしまいます。

仕方がないので、今は、APIで直接、読み込んでいるのですが、原因は何か分かりません。
よろしくお願いします。

206 名前:デフォルトの名無しさん :03/11/28 18:03
メッセージボックスのダイアログが表示された直後に
何か作業をしたいのですが、メッセージボックス等のダイアログが
表示された直後に発生するイベント(メッセージ)が見つかりません。
逆に直前に発生するのはありましたが…。
「メッセージボックスのダイアログが表示された直後」という
タイミングで何か作業をしたい場合、どうしたら良いでしょうか?

VC++.net、MFC、ダイアログベースです。

207 名前:デフォルトの名無しさん :03/11/28 18:14
フックするしかないはず。

208 名前:デフォルトの名無しさん :03/11/28 18:36
>>206
具体的にどういう処理をしたいのかな?
別なアプローチがあるかも。

209 名前:206 :03/11/28 18:55
>>208
メッセージボックスのボタンのオーナードロー化です。
FindWindow関数を使用してメッセージボックスの
ボタンのハンドルを取得したいのです。
そのため、この作業を実行するタイミングが
メッセージボックスのダイアログが表示された直後
でなければならないのです。

210 名前:デフォルトの名無しさん :03/11/28 19:41
>>209
MessageBoxがモーダルダイアログであることが問題ならば...

非可視のウィンドウやモードレスダイアログを親にしてメッセージボックスを
表示したり、別スレッドで起動すれば、「モードレスメッセージボックス」が
作成できるんだけど、ヒントにならんか?

ってか、フックする方が結局簡単かも。

211 名前:デフォルトの名無しさん :03/11/28 20:48
メッセージボックスを自作したほうが早いに 3bit

212 名前:デフォルトの名無しさん :03/11/28 21:17
オレもオリジナルのメッセージボックスにしたいなら
自分でダイアログ・クラス書いた方が自然だと思うよ
断然簡単だし

213 名前:176 :03/11/28 21:19
回答なしですね(つД`)

・そんなの一般論で片づく解決法なんてねえよ
・遅くなるのは常識なんだよ

とかいうのでもいいので何かお願いします。

214 名前:デフォルトの名無しさん :03/11/28 21:30
・今時VC5ラーニングなんて使ってねぇからわかんねぇよ

が大半かと。

215 名前:デフォルトの名無しさん :03/11/28 21:31
>>213
まさかとは思うがMFCなんて使ってないよね?
そんな馬鹿なことをするはずもないし、聞くのも失礼だった。

ほとんど同じソースで速度がそんなに変わるのは不思議だね。

216 名前:デフォルトの名無しさん :03/11/28 21:59
debugのままだったりして

217 名前:デフォルトの名無しさん :03/11/28 22:25
VC6 ProとVC.NET2003 Proで同じコードをコンパイルすることが
ちょくちょくあるのだが、後者の方が速くて小さいプログラムが
できる気がする。CRTが改善されたのかな。

218 名前:デフォルトの名無しさん :03/11/28 22:31
>>213
あれだけの説明で回答もらうのは無理だが、VC5もないし。
もっと具体的な実行ソースでも公開すれ。これ以上の回答は不可。
#まぁ、公開されてもVC5無いし・・・・

219 名前:176 :03/11/28 22:41
>>215
AppWizardベースのダイアログ型MFCアプリです
中身も大方MFC使ってますヨ
これってダメなの?
>>216
さすがにそれはないっす
>>217
他のソースにしてもVC5とVC7ではどうやってもVC7の方がビルド・ファイルは
大きくなります

>>218
全体的にもっさりしますが、特に問題の部分はListCtrlにInsertItem()−SetItemText()
でループしているところです

220 名前:デフォルトの名無しさん :03/11/28 23:16
20秒と25秒,単純にデータを追加するコードで速度が80%になってしまうという状況だが、
出力されるコードごときでそこまで速度が変化するわけがない。
この処理で最も時間を食うのは、コントロール自体の動作。
つまりMFCのバージョンが変わったから、コントロールの初期プロバティが変わって、
コントロールが余計な処理を行っている可能性があるということ。

221 名前:デフォルトの名無しさん :03/11/28 23:35
ビルド>実行時のディレクトリの指定はどこでやるのですか?
ファイルを出力するプログラムのときなど、ソースと混ざるのでやりにくいです。

222 名前:デフォルトの名無しさん :03/11/28 23:41
>>221
GetModuleFileName(NULL, path, _MAX_PATH);
という感じで実行ファイルのパスを取って処理すべきだと思う

223 名前:デフォルトの名無しさん :03/11/28 23:42
ファイルをフルパスで指定して出力しないから混ざるのだ。

224 名前:デフォルトの名無しさん :03/11/28 23:53
通常は、exeのあるフォルダからダブルクリックして
実行することを想定して作りたいのです。
>222
>223
使い捨てレベルなので、楽をしたいのですが。
やはり無理なのか

225 名前:デフォルトの名無しさん :03/11/29 00:00
>>224
数行のコードなんだし一回書いたら次から定型でコピペできるじゃん
気になるならちゃんと書けば良いし
ホントに使い捨てならそのままで良いだろ

226 名前:デフォルトの名無しさん :03/11/29 00:10
使い捨てならソースと混ざっても文句言うなよ。

227 名前:デフォルトの名無しさん :03/11/29 00:45
STATICウィンドウの背景を透過させるいい方法はないですか?
SetClassLong(hWnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(NULL_BRUSH));
としても駄目ですし、
CreateWindowExでWS_EX_TRANSPARENTを指定しても駄目でした。

228 名前:176 :03/11/29 01:11
>>220
MFC7を使う以上仕方がないということ?
それとも何か書き方がある?

229 名前:デフォルトの名無しさん :03/11/29 01:14
>>224 VC6だと、プロジェクト設定の「作業用のディレクトリ」だな

230 名前:デフォルトの名無しさん :03/11/29 01:16
>>227
2000/XP限定ならアレ。

231 名前:デフォルトの名無しさん :03/11/29 02:09
>>228
Standard Editionじゃ最適化がかからないよな。
SetRedraw(FALSE)は当然してるだろうな?

232 名前:176 :03/11/29 03:25
>>231
SetRedrawは入れてなかったので入れた分速くなりました。
ご指摘ありがとうございます。

でも
両方とも速くなったので差については目立たなくはなりましたが残ってます。

やっぱり最適化というやつの問題?
STD版は最適化が効かないからどうこうというケチがついてるのは耳にして
たんですが、値段ゆえにその上はちょっとということで。>>220はそうじゃない
という意見ですよね。

233 名前:デフォルトの名無しさん :03/11/29 05:13
>>229
感謝!聞いてみるもんだね。
変なヘッダ読まんですみました。

234 名前:206 :03/11/29 07:59
ワーカスレッドを使う方法で試したところ、
メッセージボックスのウィンドウおよび目的のボタンのハンドルの取得と
目的のボタンのスタイルをオーナードロー形式に変更するところまで成功しました。
しかし、目的のボタンの動的サブクラス化を試みると
例外エラーが発生してしまいます。メッセージボックスの
ダイアログウィンドウ自体の動的サブクラス化を試みた場合も同様でした。
どうすれば動的サブクラス化できるのでしょうか?

作業領域はグローバルメンバ領域です。
サブクラス化先のクラスは、オーナーウィンドウのメンバとして宣言しています。
(*オーナーウィンドウ名*).h
#include "(*サブクラス化先のクラスのヘッダー名*).h"
public:
static C(*サブクラス化先のクラス名*) (**))
(*オーナーウィンドウ名*).cpp
C(*サブクラス化先のクラス名*) (*オーナーウィンドウ名*)::(**)

リンカを無事通過しているので、宣言等に関しては問題ないようです。
例外エラーの内容は、
「(*アプリケーション名*)の 0x77f75a58 でハンドルされていない例外が発生しました」
というメッセージが表示され、dbgrpt.cの427行目がブレークポイントされています。
さらに、そのエラーメッセージの[継続]ボタンを押すと、今度は、
wincore.cppの384行目がブレークポイントされ、同様の作業を繰り返すと、
今度は同じく385行目がブレークポイントされます。

235 名前:デフォルトの名無しさん :03/11/29 09:12
>>228
MFCが原因だとしたら古いMFC使えばいいだけだな。

VC5からVC7ってC++の言語機能的に高度になってるから吐くコードも違うかもしれないけどな。
Standardは最適化しないからこのへんオーバーヘッドが出てるかも。

236 名前:デフォルトの名無しさん :03/11/29 11:33
>>228
API周りは最適化の影響大きいよ。VC5版の最適化を止めて比較してみたら?

237 名前:しつもn :03/11/29 16:46
VCわからん
プロジェクトはwin32 Console Applicationの空のプロジェクトで作成
テキストファイルに書き込むことができないんで教えてください

#include<stdio.h>
#include<stdlib.h>
main()
{
FILE *pt;
char simei[20];
int i,m,e;

if((pt=fopen("kekka.txt","r"))==NULL){
printf("ファイルオープンエラー\n");
exit(1);
}

printf("何番目のデータを出力しますか?\n");
scanf("&%d",&i);

fseek(pt,i*30,SEEK_SET);
fscanf(pt,"%s %d %d",simei,&m,&e);
printf("   氏  名     数 学  英 語\n");
printf("%20s  %5d  %5d\n",simei,m,e);
fclose(pt);
}

238 名前:しつもn :03/11/29 16:47
ゴメソ違う
↑は大丈夫
こっちです
#include<stdio.h>
#include<stdlib.h>

main()
{
FILE *fp1;
char name[20];
int eng,math;
int i=0;

if((fp1=fopen("kekka.txt","w"))==NULL){
printf("ファイルオープンエラー\n");
exit(1);
}

printf("データを入力してください\n終了は、CTRL+Z\n");
printf("  氏名   数学   英語\n");
while(scanf("%s %d %d",name,&eng,&math)!=EOF){
fseek(fp1,i*30L,SEEK_SET);
fprintf(fp1,"%20s%5d%5d",name,eng,math);
i++;
}
fclose(fp1);
}


239 名前:デフォルトの名無しさん :03/11/29 17:15
>>238
お前がわかってないのはCだ。よってスレ違い。

240 名前:176 :03/11/29 17:26
>>235
VC7で古いMFCに落として組むにはどうしたら良いんでしょう?
プロジェクトのプロパティから何かオプションをいじるとできるんですか?

241 名前:しつもn :03/11/29 17:27
>>239
てめーに聞いてないよ
初心者に答える場所じゃないのかよ?

242 名前:デフォルトの名無しさん :03/11/29 17:32
と引篭もりが仰っていますw

243 名前:しつもn :03/11/29 17:34
とカスが喚いています

244 名前:デフォルトの名無しさん :03/11/29 17:35
>>241
若いなぁ〜。( ´ー`)y-~~

245 名前:しつもn :03/11/29 17:36
いやまじで困っています
VCは分かってもただのCは分からないようですね

246 名前:デフォルトの名無しさん :03/11/29 17:42
>>234
CWndオブジェクト(ここではサブクラス化する香具師)はスレッドを
またげないのでうまくいかない。

新しいスレッド側でインスタンス作って、スレッドにHWND渡して
Attach()すれば...いいのかな?よぉ分からん。

247 名前:いなむらきよし :03/11/29 17:59
キケー!

248 名前:デフォルトの名無しさん :03/11/29 18:01
少し書き直したけど、書いてるぞ。
#include<stdio.h>
#include<stdlib.h>

main()
{
FILE *fp1;
char name[21];
int eng,math;
int i=0;

if((fp1=fopen("kekka.txt","w"))==NULL){
printf("ファイルオープンエラー\n");
exit(1);
}
int rtn=0;
printf("データを入力してください\n終了は、CTRL+Z\n");
printf("  氏名   数学   英語\n");
for(int i2=0;i2<3;i2++) {
scanf("%s %d %d",name,&eng,&math);
rtn=fprintf(fp1,"%20s%5d%5d",name,eng,math);
i++;
}
rtn=fclose(fp1);

#手でEOF入れられるんかい。昔過ぎて忘れた。

249 名前:248 :03/11/29 18:20
CTRL-Z  だったーー;

250 名前:デフォルトの名無しさん :03/11/29 18:47
えっと、Visual C++ .NETでプロファイルって取れないんでしょうか?

検索してもVisual C++ 6.0のやつしか出てこないんですが。
http://www.microsoft.com/japan/developer/library/vccore/perfhm.htm
何か見落としてるのかな……。


■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.