★初心者にVisual C++を教えるスレ★ Part9
1 :
◆Manna2uCLg :
03/11/16 20:53
2 :
◆Manna2uCLg :03/11/16 20:54
ぷららから、スレ立てできねぇから、ちと焦ったわ…
お疲れ様〜〜〜。
んーじゃあどうやってスレ立てたの
うう・・・ 前スレでCViewForm継承で、 ピクチャボックスを作って塗りつぶして表示するだけのコードができないと 書き込んだ者ですが、まだできません。 スクロールバーが表示されるまでウインドウを小さくして スクロールバーを動かそうとするとどうしても不正終了になってしまいます。 一体どうすればいいのかお助けください。
とりあえず、自分のOnPaintで他人に描画するのはやみれ
とりあえずピクチャボックスのみのときは解決しました。どうもです。
Lineto、Ellipse等で線や円を描くとき,色の指定はどのように行うのでしょうか? できるだけ簡単な方法を教えてください。
CreatePen SelectObject
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のもってるメニューとタスクバーのメニューがどっちも出ちゃうことがあるのね。 どうしたら、期待しないタイミングでタスクバーメニューをださないようにできるかなぁ
CFormView継承でウインドウのサイズ変更不可にするにはどうしたらいいのですか? cs.style&=~WS_THICKFRME; とやってもなんか駄目です。
>>14 むしろWM_SIZEでスクロールバーがでないように
調整して下さい。
>>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);
}
ありがとうございます。解決しました。 CFormViewって便利なようで何か使い勝手悪いですね。
18 :
デフォルトの名無しさん :03/11/22 13:34
ステータスバーやツールバーを、 後で消したいと思ったらどこを設定すればいいですか?
CMainFrameのOnCreate
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; } 上のようなプログラムで直線を描くと出発点が曲がって、ひとつの直線に できません。 滑らかな直線を描画すればどのようなアルゴリズムを用いればよいのでしょうか?
>上のようなプログラムで直線を描くと出発点が曲がって、ひとつの直線に できません。 ひとつの直線→滑らかな直線 です、、すみません
23 :
デフォルトの名無しさん :03/11/22 14:08
HDC使うか、中学校の数学やり直せっと。
>>22 関数、、一応習ったはずですが、、
配列中にある入力画素中(0=白、1=黒)の2点を結ぶとしたら、
その二点から始点と傾きは導出できますが、その値を元に
直線を配列中に入れるのはどうすれば良いのでしょうか、、、アホで済みません
>>24 HDCとは何でしょうか?
>>25 LineDDAというのは関数でしょうか?
日本語が・・・ 素朴な疑問なんだが、出発点って曲がるものなのか? 点に曲がるも曲がらないもないと思ってたんだが。
出発点での微分係数が変化するってことじゃないの? どうでもいいけど、なんか CDC:: とか打っても関数リストが出てこなくなるときがあるのだけど どういうことですか?
>>29 6.0か?
拡張子が「ncb」のファイルを削除したら直る。
31 :
デフォルトの名無しさん :03/11/22 17:47
連続的に書き込んでいってアニメーションさせたときのちらつきは メモリデバイスコンテキストを使って解決したのですが、 ボタンなどのコントロールのちらつきを抑えることが出来ません。 どうすれば良いのですか?
32 :
デフォルトの名無しさん :03/11/22 18:05
コントロールのハンドラの中でInvalidateRect(NULL,TRUE)になってない? TRUEをFALSEにしないと・・・。 そんな単純な問題じゃないか。(´д`;;)
一応OnEraseBkgndでNULLを返しているのですが、 ボタンの部分だけちらつきます。 ボタンの部分は、一度消してから再描画しているような手応えなので それってどうにかなりませんか?
クリップスタイル
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がでます。どうしたもんでしょう。
>>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がでます。
Viewなんだから、pWndじゃなくてthis使ったらええやん。
>>37 その警告のまんま。ポインタ(pWnd)が何も指して無い。
CWnd* pWnd=・・・・
>>37 何したいのか知らんが
CWnd* pWnd;
pDC=pWnd->GetDC();
の2文は消せ。
42 :
デフォルトの名無しさん :03/11/22 20:51
簡単なHTTPプロクシを作っていて、winsockでlistenした後待機するにはどうしたらいいでしょうか? とりあえずウィンドウを表示してGetMessageループで待つ方法では成功してるんですが、 理想はconsoleだけで構築したいのです。ご教授お願いします。
>>42 >とりあえずウィンドウを表示してGetMessageループで待つ
ウィンドウを表示しなければいいだけじゃないのか?
44 :
デフォルトの名無しさん :03/11/22 21:04
>>43 GETMESSAGEはウィンドウを作らなくても使える関数?なんでしょうか?
CをやるからにはあまりGUIを使いたくなくて。
consoleでイベントを得る為に待機する一般的な方法がわかれば自分で必死で調べるつもりなんですが。
>>44 WaitForSingleObject()で待てばいいんでないかい?
46 :
デフォルトの名無しさん :03/11/22 21:43
>>45 WaitForSingleObjectっていうとスレッド処理ですか?
やっぱスレッドですか、初心者には辛い…けど、やってみます。
ありがとうございました
>>46 スレッド起こさなくても使えるよ。
#まじめに作るならスレッド起こした方が遥かに楽だと思うが。
>>44 いや、ウィンドウを作っても表示しなけりゃいいんじゃないの、と
49 :
デフォルトの名無しさん :03/11/22 21:59
>>47 ちなみにスレッドを起こさないで使う場合WaitForSingleObjectのhHandleには何を指定すればいいのでしょうか?甘えてすいません
>>48 現実的に言えばそうなんですけど(´・ω・`)
ごり押し的なプログラムじゃなくてできるだけ綺麗なソースを書きたかったもので。
50 :
デフォルトの名無しさん :03/11/22 22:16
IRCサーバーのようなものを作りたいのですが 良いクラスライブラリありませんか?(普通のライブラリでも良いのですが・・・
while(listen==0){ accept... recv... send... } でないの?listenをブロックさせれば。
>>51 複数の接続があって
それら個別に反応を返さないといけないので・・・
あと、MFCのクラスはWinsock1を使ってるみたいなので、1024以上のコネクションをするにはWinsock2を使わないといけない気もするんで…
とりあえずできた! 初心者なのでスレッドはひとまず宿題にしましたが while(WaitForSingleObject(NULL, INFINITE)){ ・・・ } で待機できました!ありがとうございました!
>>49 > WaitForSingleObjectのhHandleには何を指定すればいいのでしょうか?
自分が何を待ちたいのかもわかっていないのか ?
>>53 > WaitForSingleObject(NULL, ...
やっぱりネタだったんだな...。
アプリケーションの終了や、 右上の×ボタンを押したときに呼び出されるメッセージハンドラは どこにあるんですか?
>>57 CWinApp::ExitInstance();
CWnd::OnDestroy();
59 :
デフォルトの名無しさん :03/11/23 12:09
#ifと#ifdefの違いはなんでしょうか?
60 :
デフォルトの名無しさん :03/11/23 13:13
vc++で2chブラウザを作る時ネット関係はWININETで十分ですか?
>>60 そんなもの必要ない。
WebBrowserコントロールを貼り付けるだけでOK。
>>60 WinInetで十分。
WebBrowserコントロールを貼り付ける
だけじゃダメ。
>>62 アドバイスありがとうございます。
頑張ってみます
下げ忘れた・・・すいません
駄目です、なんかちらついてしまいます。 ボタンも再描画しているのが原因だと思うのですが、 ピクチャボックスだけ再描画するとかできませんか?
vc5で #include <wininet.h> すると膨大なエラーが出るんですがどうしたらいいのでしょうか?よろしくおねがいします
wininetは事前にWindows.hとかwinsock.hとかのincludeを必要としている、 という可能性は有るような気がする。まあ、エラーが提示されないのでなんとも いえないけれど。
>>67 >>wininetは事前にWindows.hとかwinsock.hとかのincludeを必要としている
詳しくはわからないのですが上のお言葉を元にINETの処理が書いてあるソースにincludeしたら動きました。
ありがとうございました
#エラーメッセージは100以上あったので書き込みませんでした、すいません
´Д`)また下げ忘れた・・・
70 :
デフォルトの名無しさん :03/11/23 16:37
>>65 ボタンクリックのイベントハンドラ関数内を記述
もしくは
m_〜でDDX使ってるなら、その処理の記述
を晒して味噌。アドバがあるかもよ。
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を使うのはおかしいのでしょうか? しかしどうやればいいのか分かりません。
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); ですた。
pict->Invalidate();
うあ〜〜なるほど! 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でしかボタンが描かれてない様けど。
描画するたびにCreateする方がどうかと思うが。 ボタン貼り付けるくらいだからCFormViewの派生だろ? ならOnInitialUpdateでいい。
>>75 自分も、再描画したときボタンが消えそうな気がして
OnDraw内にbtn->Create(・・)
とか入れたことがあったのですが、なんかおかしくなったので
InitialUpdate内にしたらうまくいきました。
さらに新規作成したときにも、再び作成されないようにチェックも入れました。
CWndは一度作って表示するとDeleteするまで消滅しないから
再描画する必要はないっぽいです。合ってますか?
というか、普通、Formビューを使うなら、今回の例のように 再描画したいコントロールを個別にInvalidateしたりして、 ビュー自体のOnDrawはいじらないことが多いが・・・ 本当にビュー自体を再描画する必要があるのか? つまりビューのOnDrawをいじる必要があるのか? 仮に、本当にビューに何か(背景画像とか)を描画して、 その上にコントロールを乗せたいなら、 普通は背景に描画(OnEraseBkgndで描画)する。
うう・・・再描画したいコントロールを個別にInvalidateするって 例えばpict->Invalidate();でやるのですよね? その描画処理の内部ってどこに描けば良いか分かりません・・・。 親ウインドウならOnDrawに書けばいいんですけど、 子ウインドウの場合は一般的にどうするのでしょうか?
>>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();
}
------------------------------------------------------
ウィンドウズアプリにすれば解決するのかもしれませんが、コンソールアプリである必要があります。
大変申し訳ありませんが、ご助力の程宜しくお願い致します。
失礼いたしました。誤記がありました。 誤:win98コンソールアプリで、SHIFT/ALT/CONSOLEキー押下の判定はどういった方法で実現できるでしょうか。 正:win98コンソールアプリで、SHIFT/ALT/CTRLキー押下の判定はどういった方法で実現できるでしょうか。 よろしくおねがいします。m(_ _)m
Win9Xのコンソールには、なんかややこしい制限が有ったと思う。 KB漁ってみ。
WaveIn系の関数で録音するとき、音声の入力先はどうやって 指定するんでしょうか?プログラム側で操作する方法がわからず苦労してます。
ありがとうございます。 「ややこしい制限」ですか。。。調べてみます。
0x80000000じゃなくて0x8000だにょ
>>3 かわいそうに・・・。
本当はポーッとした子なのにこんなにハキハキ喋らされて・・・。
辛かっただろうな。
>84 完全にWin32APIスレの範疇だと思うがまあいいか。 入力先デバイス、って意味じゃあないよな?これは簡単だし。 マイクとかCDとかラインインとか、の選択なら、ミキサーデバイスを扱う必要がある。 俺はめんどくさいので「ボリュームコントローラーを起動しる」としているが。
>>88 ああ、やっぱりミキサーを使うしかないんですね。
あれさっぱりわかんないです。
情報も少ないし。
気長にやってみます。
Winsock2.0でHTMLページを取得するプログラムを書いたのですが "6e3" とか "fd4" といった文字列を受信することがあるのですが これは何かの規格ですか?それともWinsockの仕様なのでしょうか?
粋がってHTTP/1.1でリクエストを出さず、HTTP/1.0でリクエストしましょう。 それがいやなら、RFC2616くらい読め。キーワードはContent-Tranfer- Encoding.
CBitmapをCreateCompatibleBitmapしたとき、 最初の色がRGB(0,0,0)ですけどRGB(255,255,255)にできませんか? まあ作った後塗りつぶせばいいだけですけど、 そのプロセスを省けないかなぁと。
CBitmapの派生クラスを作るとかじゃいかんの?
96 :
デフォルトの名無しさん :03/11/25 01:08
DDB(デバイス依存ビットマップ)とは何でしょうか? 具体的には?
はじめまして。 何が問題なのか教えていただけないでしょうか。 ”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); } -------------------------------------------------- どうか 問題点を指摘、修正案をどうかよろしくお願いいたします。
訂正です if (ScreenH < EPicH){ //画面のタテ < 絵のタテ ↓ if (ScreenH < BasePicH){ //画面のタテ < 絵のタテ
Cからやり直した方がいいんじゃないか。 840/900の答えをintに入れたら0になるだろ。 その0と1000を掛けてるんだから当然0になる。
>>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; } を実行すると変なダイアログが出て強制終了?されてしまいます、何が原因なのでしょうか? お願いします
>x00102 = "SSSSSSSSSSSSSSSSSSSSs\0"; >delete x00102; これが原因と思われ
103 :
デフォルトの名無しさん :03/11/25 14:00
>>102 deleteのどこが問題なのか小一時間問いつめたい
すまぬ。かなり問題だ。 =で代入しているもんな。
105 :
デフォルトの名無しさん :03/11/25 14:14
具体的にはどうすればいいんでしょうか? char *x00102; x00102 = new char; strcpy(x00102, "555"); cout << x00102; delete x00102; return 0; 試しに上でやってみたんですがまたダイアログが出てしまいます
>>105 マジレスすると
x00102=new char[4];
delete []x00102;
ありがとうございます。数を指定していなかったのが悪かったのですね。解決しました。
Microsoft Visual C++ 6.0でフルスクリーンのアプリを作りたいと 思っています。 MFCは使っても使わなくてもどちらでも構いません。 フルスクリーンと言うのはタスクバーも隠れている状態で、スクリー ンセーバーのようなイメージです。 取っ掛かりのフルスクリーンを塗りつぶすにはどうすればよいのかで 悩んでいます。 例えば、ウインドウをフルスクリーンのサイズで指定して起動して、 メニュー等を非表示にするのか、見えないウインドウを作成して、フ ルスクリーンの座標を塗りつぶすのか・・・ 最終的にやりたい事はキーやマウスの全てのイベントを独り占めにし、 画面上に文字や画像を表示するといった事です。
DirectXでも使ったら?そのためのAPIなんだし。
>>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行目では何も表示されません どのようにしたらよいでしょうか?ご教授お願いします。
vector<string>
>>111 おまえ
>>101 だろ。文字と文字列の違いがわかってないみたいだから
2chで質問する前に本読んで勉強すれ。
114 :
デフォルトの名無しさん :03/11/25 16:57
>>112 それはやってみたのですが
・・・'type cast' : 'class std::basic_string<char,s・・・
なんたらかんたらのエラーが出て(キャストエラー?)動作しないんです。
>>114 そらstringにcharキャストしてるからだろ。
いいからC++の入門書でも読めって。絶対その方が近道だから。
>>109-110 ども。
DirectXですか。DirectXは一切知識がないのですが、調べて見ることにします。
結果、作成に時間がかかりそうならフルスクリーンサイズのウィンドウを作る方法で
やってみたいと思います。
ありがとうございました。
>>113 文字列定数の最後に無意味な\0を書き加えているあたり、同じ人だと分かるよね。
>>115 ん、確かにそれはその通りなんで入門書は読める時に読みます。
でもなんとなくは掴んできたんすよ(・∀・)
ちなみにコンパイル時に膨大な警告がでるもののstringでうまくいきました。
ありがとうございました
119 :
デフォルトの名無しさん :03/11/25 17:51
HtmlHelp関数をAPI関数として使用したいのですが、 実行時にCWnd::HtmlHelpとして認識されてしまいます。 HtmlHelp関数をAPI関数として使用するには どうすれば良いでしょうか? VC++.netです。
::HtmlHelp()というわけか?
122 :
デフォルトの名無しさん :03/11/25 21:11
<鉄のおきて> 標準テンプレートは使ってはいけない。 理由。 ・本心、俺が使えないから。 ・表面、Linuxのg++ではなぜか<list>が使えなかったから。 よって 全て自作これ最強、でも玄人以外お勧めできない。 諸刃の剣。
VC++すれだったか・・すれ違いだった。 すまん。 PS.MFCなんておわっとる。
unsigned char test[n] とかやって、 printf("%p",test); で出てくる値は、そのプログラムがメモリ上に配置されている場所の 先頭からのオフセット値と思っていいんでしょうか? それとも、動的に割り当てられた部分(ヒープって言うんでしょうか?)はプログラム自体とは 全然離れているんでしょうか。 ・・・メモリエディタで、自分が代入したのをこの目で見ないとどうも気が収まらなくて。(ノ∀`)
>>124 そういうことを気にするなら、まずはOSがどのようにメモリ管理をしているのか調べるところから始めろ。
そうでないならそういうもんだと思っておけ。
#ま、VCならデバッガで見ればいろんなことがわかるだろうがな。
126 :
デフォルトの名無しさん :03/11/26 07:41
メッセージボックスが表示中の時にも こちら側で何か作業をしたいのですが、 どうすれば良いでしょうか? VC++.netでMFC、 メッセージボックスは、MB_APPLMODAL様式です。
128 :
デフォルトの名無しさん :03/11/26 09:26
マルチスレッドに関してのサイトや良書を紹介願えませんか?
130 :
デフォルトの名無しさん :03/11/26 13:52
すみません。初心者というかそれ以前の問題なんですけどC++のプログラムを実行できません 誰かご教授していただけませんか?
>>130 個人教授は、あなたが妙齢の麗しい女性であった場合にのみ、受け付けます。
教授料は肉体関係で、交通費は別途、現金にて。
132 :
デフォルトの名無しさん :03/11/26 16:01
プロジェクト名 ”test” SDI形式のプロジェクトを作成しました。 ここで、クラスビューから見える"CtestView"から、CbitmapViewを派生させたいのですが、 プロジェクト→クラスの追加→MFC と行っても、基本クラスには、CtestViewは見付かりません ドウシタラ宜しいのでしょうか? ちなみにバージョンは VC++.net2002 standard です。
手書きで、ごりごりかいてたら出来たので......... すいません。
134 :
デフォルトの名無しさん :03/11/26 17:20
サービスプログラムで、ネットワークフォルダに書き込めないんだが。なんでやねん。
135 :
デフォルトの名無しさん :03/11/26 17:33
”書込み禁止だった”とか
>>134 ローカルシステムアカウントだと権限ないよ。
VC.NET 2003 standardでも、/LTCG ビルドオプションをつけると、 コードはちょっとくらい最適化されますか?
138 :
デフォルトの名無しさん :03/11/26 19:37
windowsのエクスプローラって凄いソフトなんですか? 同等のものは作れないと言う人が結構多いような 感じですけど。 作るのはとてつもなく大変なんですかね?
うん。昔のファイルマネージャくらいなら なんとかなるけどエクスプローラになると 面倒そうだね。
/OPT:NOWIN98
141 :
デフォルトの名無しさん :03/11/26 21:30
トウラトウサケ
142 :
デフォルトの名無しさん :03/11/26 22:36
CDialogの派生クラスでGetDocument()が効かないのですが、 CDialogクラスの派生クラスで、CDocumentクラスの派生クラスのオブジェクト得るにはどうしたら良いでしょうか。
145 :
デフォルトの名無しさん :03/11/26 23:43
VC++で関数の仕様が書いてあるドキュメントはないですか? プログラミング中にあんな事したいなぁと思った時に見たいんですが
MSDN
147 :
デフォルトの名無しさん :03/11/26 23:44
148 :
デフォルトの名無しさん :03/11/26 23:45
割れか。ほっとけ。
>>147 パッケージの中に入っているCDROM全部さがしてみなはれ
151 :
デフォルトの名無しさん :03/11/27 00:45
>>136 ちがうWorkGroupのサーバの共有フォルダに書き込みたいんだけども、
するってぇと、相手先のWorkGroupのユーザアカウントで入らんと駄目ってこと?
つーか、WorkGroup管理のユーザって、自PCに(サービスプログラムの実行アカウントで)登録できたっけか。。?
その通り。 アクセス権のあるユーザーでサービスにログオンさせればOKだよ。
>>138 シェルのいじり方わかってれば作れると思うけど
154 :
デフォルトの名無しさん :03/11/27 02:42
#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 を使ってるのですが、どなたか教えてください. お願いします.
すいません, 書き間違えです. 誤) SendMessage(hCombobox, CB_SETCURSEL, (WPARAM)KeyCombobox, 0); 正) SendMessage(hCombobox, CB_SETCURSEL, 0, 0);
どの部分がインデックスを取得してるコードだゴルァ
すみません. 文字取得できるかの実験中に貼り付けてしまいました…. 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; }
LPARAM szCombo[2] = {(LPARAM)"AA", (LPARAM)"BB"}; を static LPARAM szCombo[2] = {(LPARAM)"AA", (LPARAM)"BB"}; にするとか?
>>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 だとどうなりますか?
>>160 hComboboxはauto変数じゃダメポだけど、それじゃないのかなぁとかオモタ。
>>142 に関してですけど、
C〜Dlg dlgをViewに作って、
viewでdlg.〜でdlgのオブジェクト取得して、GetDocument()でdocのオブジェクト取得して、
view内でdlgとdocをつなげることにしました。
話は変わるのですが、ラジオボタンからGetDlgItemでボタン状態を取得できますが、
逆にdlg閉じるときのラジオボタンへの入力は何の関数使えばよいでしょか。
ちなみに、5個くらいでラジオボタンのグループ組んでるのでm_〜がグループの先頭のだけしかつくれず、m_〜は使えない状態です。
すいません、追記します。 「逆にdlg閉じるときのラジオボタンへの入力何の関数」は ダイアログボックス閉じるときの.cppからラジオボタンへの入力の関数のことです。 ラジオボタンの状態の保存といいますか・・・。
>>161 CBN_SELENDOK でも変わりませんでした.
>>163 訂正してみたところ、以下のように怒られる羽目に….
訂正前) static HWND hCombobox;
訂正後) HWND hCombobox;
エラー) 値が割り当てられていないローカルな変数 'hCombobox' に対して参照が行われました
「猫でもわかるプログラミング」はstaticで置いてたから大丈夫かと思ったのですが.
ソースを置いてみたので, お時間の空いている方, お願いします.
けっこう長いんですけど….
http://www.balbal.net/program.zip
>>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
コンパイルして実行したら下記エラーが出たぞ。 Run-Time Check Failure #2 - Stack around the variable 'cs' was corrupted. デバックするきないので、がんばれやー。 所で、俺は古い人間なので最近の傾向は知らないが。 ヘッダーファイルに関数入れるのは普通? クラスファイルやテンプレートは理解できるが、古い人間としては、 巨大なヘッダーファイルには違和感ありあり^^; (クラス多発すると巨大になるんだよな・・・・・;;)
170 :
デフォルトの名無しさん :03/11/27 16:06
>>169 家のVC++6.0だと何もエラーでなかったよ。ちなみにOS==糞ME。
>>166 の
http://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);
がおかしいみたいだよ。
>>169 もうちょっと試行錯誤してみます….
>>170 >>168 にて改善してみたのですが…. 駄目でしょうか?
>>157 ,159,161,163,167,169,170さん, 相談乗っていただき, ありがとうございました.
もうちょっと1人でVC++と格闘してみます…(´・ω・`)
>>170 同じくエラー、VC++.2003+w2000Proの環境違い?
デバックしてしまったーー; 348行 ×char cs[1]; ○char cs[100];
>>172 今, ファイルをダウンロードしたら中身壊れてたので, 再度アップしなおしてみました.
環境は Win2000Pro + VC++6 でやってます.
KeyCombobox =SendMessage(hCombobox,CB_GETCOUNT,0,0);
とやっても, KeyComboboxには 0 しか入らないので,
たぶんコンボボックス周辺がおかしいのかなぁと思ってるのですが,,,
もうちょっと, がんがてみます(`・ω・´)!!
>>173 デバッグまでしていただき, ありがとうございます.
348 char cs[100];
349 sprintf(cs, "%d", KeyCombobox);
350 TextOut(hdc, 620, 400, cs, 100);
上は KeyCombobox がどう変化しているか見ているために書いたのですが,
cs[100] でも cs[10] でも同じ結果になります.
根本的に何か間違えてるのかなぁ…(´・ω・`)
VC5とVC7でビルドしたプログラムが、VC7の方で顕著に遅くなるんですが、 パフォーマンス問題解消のポイントはありますか? 具体的には、ファイルから読み込んだデータを整理し、ListCtrlに表示していく というプログラムです。両者でコードの中身はほぼ同じです。型の問題など の出るところだけちょこっと直してあるだけです。 例えば、VC5の方で20秒かかる処理が、VC7の方で25秒くらいになります。 VC5LearningEd VC.netSTD win2k
すいません, 自己解決しました.
144行目
訂正前) static HWND hCombobox;
訂正後) static HWND hCombobox = NULL;
にしたら, 何故かできました.
>>157 ,159,161,163,167,169,170,172,173さん、本当にありがとうございました…つД`)
ちなみに修正後こちらでは KeyCombobox =SendMessage(hCombobox,CB_GETCOUNT,0,0); で0,1が正しくはいっている。処理見てないのでわからんが。 ちなみに。1のときダイアログが出る。 0のときは何やら黒丸が出る。
おめでとーーーーー178ね
今すこし見たけど、それでうまくいくなら、何処かメモリーリークしてないか? 一応見てみて、他のトラブルもある可能性が・・・・ さっきののところのリークなら良いけど
>>178-179 ありがとうございます.
漏れも皆さんのように教えるレベルになるようがんがります !!(`・ω・´)!!
気付いたんだが、 WM_CREATE で CreateWindow("COMBOBOX"); の戻り値を hCombobox に入れてるわけですが、 いざ SendMessage(hCombobox, CB_GETCURSEL, 0, 0) しようとしたとき、 hCombobox の値が変わってるぞ… すくなからずうちの環境(Win2k VC6)では… つーか、ソースもうちっと綺麗に書いてみては? そうしないと、バグも見つからんと思うぞ…
ソース公開すると大変だけど、いい勉強になるな、がんばれやーーー
>>180 40行目を以下のように訂正したところ, 大丈夫になりました.
訂正前) int KeyCombobox;
訂正後) int KeyCombobox = 0;
>>180 さんのメモリーリークは DestroyWindow か delete し忘れかな….
今から探ってみます.
>>182 初めてSDK触ってみたのですが, 思ったより行数が多くて…つД`)
今後ソースを綺麗に書く努力します.
追伸だが、 : : 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だといずれも問題ないんだけど。
>すみません。基本的なことなんですけど、 確かに基本的なことだが、まずどうして基本的だと判断したのか理由を述べよ。
189 :
Javaからの転入初心者 :03/11/27 21:41
>>187 回答ありがとうございます。オブジェクトに対するポインタに関係する
事柄で、おそらく上級者にとっては基本的なことだと思いましたので。
質問があります。 データ型とフォーマット指定子なんですが、 char, unsigned char, signed char は、全部 %c ですか?
char型と%cの書式指定に関連性はない。 たまたま%cで出力したい物がchar型に入っていることが多いだけの話。
了解しました。ありがとうございます。
>>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:の処理も行っている。
今の所問題ないけど、ここも修正した方が良い
>>190 フォーマット指定子と一括りにするのは止めろ。
printf()系とscanf()系のそれはその思想がかなり違う。
195 :
Javaからの転入初心者 :03/11/27 23:55
Java経験者がVCを学ぶのにいい方法、押さえておくポイントはあるでしょうか。 つくづく、Javaが簡単に思えます。慣れの問題でしょうか。
>>195 まずC(C++)を覚えろ。
話はそれからだ!
197 :
Javaからの転入初心者 :03/11/28 01:10
Cは経験済みです。 C++も入門書は押さえました。
198 :
デフォルトの名無しさん :03/11/28 02:18
console画面の最後の行だけを消すなんて事はできるのでしょうか?
>>193 ループしすぎで hCombobox の値が変わるなんて事あるんですか?
初めて知りました….
コードの勉強だけでなく, 中身ももっと勉強せねば….
そしてバグのご指摘どうもです.
言われて気づきました…. 本当にありがとうございます.
VisualC++でMFCをつかいSDIソフトを作ってるんですが、 2chブラウザのようなしおり機能をつけるにはどうすればよいのでしょう? ようするにスクロールしなければいけないドキュメントがビューに表示されている場合 好きな部分がフレーム内に表示されるようにソフト側で操作するにはどうすればよいのでしょう?
>>195 Javaの方が簡単だと思う固定観念を捨てなさい。
Javaなんて、ポインタを見せないようにしただけなんだから。
203 :
Javaからの転入初心者 :03/11/28 08:35
で、すみません。どなたか
>>186 の問題、詳しく教えていただけないでしょうか。
ここを読めとか言うのでもOKです。
205 :
デフォルトの名無しさん :03/11/28 15:20
リソースの追加でBitmapを追加したいのですが、 「リソースの追加→Bitmap→インポート」 の手順で追加すると何故かそのBitmapファイルのアイコンがリソースのアイコンの箇所にインポートされてしまいます。 仕方がないので、今は、APIで直接、読み込んでいるのですが、原因は何か分かりません。 よろしくお願いします。
206 :
デフォルトの名無しさん :03/11/28 18:03
メッセージボックスのダイアログが表示された直後に 何か作業をしたいのですが、メッセージボックス等のダイアログが 表示された直後に発生するイベント(メッセージ)が見つかりません。 逆に直前に発生するのはありましたが…。 「メッセージボックスのダイアログが表示された直後」という タイミングで何か作業をしたい場合、どうしたら良いでしょうか? VC++.net、MFC、ダイアログベースです。
フックするしかないはず。
>>206 具体的にどういう処理をしたいのかな?
別なアプローチがあるかも。
>>208 メッセージボックスのボタンのオーナードロー化です。
FindWindow関数を使用してメッセージボックスの
ボタンのハンドルを取得したいのです。
そのため、この作業を実行するタイミングが
メッセージボックスのダイアログが表示された直後
でなければならないのです。
>>209 MessageBoxがモーダルダイアログであることが問題ならば...
非可視のウィンドウやモードレスダイアログを親にしてメッセージボックスを
表示したり、別スレッドで起動すれば、「モードレスメッセージボックス」が
作成できるんだけど、ヒントにならんか?
ってか、フックする方が結局簡単かも。
メッセージボックスを自作したほうが早いに 3bit
オレもオリジナルのメッセージボックスにしたいなら 自分でダイアログ・クラス書いた方が自然だと思うよ 断然簡単だし
回答なしですね(つД`) ・そんなの一般論で片づく解決法なんてねえよ ・遅くなるのは常識なんだよ とかいうのでもいいので何かお願いします。
・今時VC5ラーニングなんて使ってねぇからわかんねぇよ が大半かと。
>>213 まさかとは思うがMFCなんて使ってないよね?
そんな馬鹿なことをするはずもないし、聞くのも失礼だった。
ほとんど同じソースで速度がそんなに変わるのは不思議だね。
216 :
デフォルトの名無しさん :03/11/28 21:59
debugのままだったりして
VC6 ProとVC.NET2003 Proで同じコードをコンパイルすることが ちょくちょくあるのだが、後者の方が速くて小さいプログラムが できる気がする。CRTが改善されたのかな。
>>213 あれだけの説明で回答もらうのは無理だが、VC5もないし。
もっと具体的な実行ソースでも公開すれ。これ以上の回答は不可。
#まぁ、公開されてもVC5無いし・・・・
>>215 AppWizardベースのダイアログ型MFCアプリです
中身も大方MFC使ってますヨ
これってダメなの?
>>216 さすがにそれはないっす
>>217 他のソースにしてもVC5とVC7ではどうやってもVC7の方がビルド・ファイルは
大きくなります
>>218 全体的にもっさりしますが、特に問題の部分はListCtrlにInsertItem()−SetItemText()
でループしているところです
20秒と25秒,単純にデータを追加するコードで速度が80%になってしまうという状況だが、 出力されるコードごときでそこまで速度が変化するわけがない。 この処理で最も時間を食うのは、コントロール自体の動作。 つまりMFCのバージョンが変わったから、コントロールの初期プロバティが変わって、 コントロールが余計な処理を行っている可能性があるということ。
221 :
デフォルトの名無しさん :03/11/28 23:35
ビルド>実行時のディレクトリの指定はどこでやるのですか? ファイルを出力するプログラムのときなど、ソースと混ざるのでやりにくいです。
>>221 GetModuleFileName(NULL, path, _MAX_PATH);
という感じで実行ファイルのパスを取って処理すべきだと思う
ファイルをフルパスで指定して出力しないから混ざるのだ。
224 :
デフォルトの名無しさん :03/11/28 23:53
通常は、exeのあるフォルダからダブルクリックして 実行することを想定して作りたいのです。 >222 >223 使い捨てレベルなので、楽をしたいのですが。 やはり無理なのか
>>224 数行のコードなんだし一回書いたら次から定型でコピペできるじゃん
気になるならちゃんと書けば良いし
ホントに使い捨てならそのままで良いだろ
使い捨てならソースと混ざっても文句言うなよ。
STATICウィンドウの背景を透過させるいい方法はないですか? SetClassLong(hWnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(NULL_BRUSH)); としても駄目ですし、 CreateWindowExでWS_EX_TRANSPARENTを指定しても駄目でした。
>>220 MFC7を使う以上仕方がないということ?
それとも何か書き方がある?
>>224 VC6だと、プロジェクト設定の「作業用のディレクトリ」だな
>>228 Standard Editionじゃ最適化がかからないよな。
SetRedraw(FALSE)は当然してるだろうな?
>>231 SetRedrawは入れてなかったので入れた分速くなりました。
ご指摘ありがとうございます。
でも
両方とも速くなったので差については目立たなくはなりましたが残ってます。
やっぱり最適化というやつの問題?
STD版は最適化が効かないからどうこうというケチがついてるのは耳にして
たんですが、値段ゆえにその上はちょっとということで。
>>220 はそうじゃない
という意見ですよね。
>>229 感謝!聞いてみるもんだね。
変なヘッダ読まんですみました。
ワーカスレッドを使う方法で試したところ、 メッセージボックスのウィンドウおよび目的のボタンのハンドルの取得と 目的のボタンのスタイルをオーナードロー形式に変更するところまで成功しました。 しかし、目的のボタンの動的サブクラス化を試みると 例外エラーが発生してしまいます。メッセージボックスの ダイアログウィンドウ自体の動的サブクラス化を試みた場合も同様でした。 どうすれば動的サブクラス化できるのでしょうか? 作業領域はグローバルメンバ領域です。 サブクラス化先のクラスは、オーナーウィンドウのメンバとして宣言しています。 (*オーナーウィンドウ名*).h #include "(*サブクラス化先のクラスのヘッダー名*).h" public: static C(*サブクラス化先のクラス名*) (**)) (*オーナーウィンドウ名*).cpp C(*サブクラス化先のクラス名*) (*オーナーウィンドウ名*)::(**) リンカを無事通過しているので、宣言等に関しては問題ないようです。 例外エラーの内容は、 「(*アプリケーション名*)の 0x77f75a58 でハンドルされていない例外が発生しました」 というメッセージが表示され、dbgrpt.cの427行目がブレークポイントされています。 さらに、そのエラーメッセージの[継続]ボタンを押すと、今度は、 wincore.cppの384行目がブレークポイントされ、同様の作業を繰り返すと、 今度は同じく385行目がブレークポイントされます。
>>228 MFCが原因だとしたら古いMFC使えばいいだけだな。
VC5からVC7ってC++の言語機能的に高度になってるから吐くコードも違うかもしれないけどな。
Standardは最適化しないからこのへんオーバーヘッドが出てるかも。
>>228 API周りは最適化の影響大きいよ。VC5版の最適化を止めて比較してみたら?
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); }
ゴメソ違う ↑は大丈夫 こっちです #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); }
>>238 お前がわかってないのはCだ。よってスレ違い。
>>235 VC7で古いMFCに落として組むにはどうしたら良いんでしょう?
プロジェクトのプロパティから何かオプションをいじるとできるんですか?
>>239 てめーに聞いてないよ
初心者に答える場所じゃないのかよ?
242 :
デフォルトの名無しさん :03/11/29 17:32
と引篭もりが仰っていますw
とカスが喚いています
いやまじで困っています VCは分かってもただのCは分からないようですね
>>234 CWndオブジェクト(ここではサブクラス化する香具師)はスレッドを
またげないのでうまくいかない。
新しいスレッド側でインスタンス作って、スレッドにHWND渡して
Attach()すれば...いいのかな?よぉ分からん。
247 :
いなむらきよし :03/11/29 17:59
キケー!
少し書き直したけど、書いてるぞ。 #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入れられるんかい。昔過ぎて忘れた。
CTRL-Z だったーー;
>>245 なんだ、マルチの挙げ句に人にものを聞く態度でもない香具師だったんだ。
向こうで答えて損した。
int i; for(i=0; i<33000; i++) printf("%d", i); 問 これは終了するか否か 独習Cにて上のような問題がありました。 解答を見ると、「終了しない、何故ならintだから」とありました。 intを16bitと仮定した上での解答だと思われますが、実際にやったところ、ばっちり終わりました・・・・アレ? VisualC++って intはもしかして32bitですか?
ごめんなさい・・・思いっきり書いてありました・・・・・
さらにごめんなさい・・・・・ 上のは私です・・・・
255 :
デフォルトの名無しさん :03/11/30 01:40
>VisualC++って intはもしかして32bitですか? 意味がわからんぞ?
WindowsがIA32の上に乗ってる限りはintは32bitだ
VC++でDLLを作ってみようと、Try & Errorで悪戦苦闘しています。 ひとまず「DLLはビルド時に関数をエクスポートしないと外部から呼び出せない」ってのはわかりました。 で、VC++で作られたDLLの見本(公開されてるものをお手本にしてる)を depends.exe で 覗いてみると、_hogehoge @0 という感じでエクスポートされた関数名が出ています。 そこで、自前のDLLでも void hogehoge(void) を作り、defファイルに EXPORT hogehogeと書いて プロジェクトに加え、ビルドしたのですが、同じ方法で覗いてみると hogehoge としか出ていません。 アンダースコアと序数(ですか?)はどこへ・・・?('A`)
そりゃ、あなた、見本のほうは defファイルじゃなくて __declspec(dllexport) でエクスポートしてるからだよ。
オマエら、 ブラウザのアドレス欄に、ファイル名称を表示させない方法、 知らね〜だろ。 大手サイト作ってる奴しか知らないワナ♪
誰かブラウザのアドレス欄に、ファイル名称を表示させない方法を教えてください
ツールバー右クリックでメニュー出して「アドレスバー」のチェックを外しやがれ
>>261 もう少しプログラマーらしい回答をしろよ。
IWebBrowser2::ShowBrowserBar()で消すんだよ。
>>235 >>240 の件に回答いただけませんか?
ここ聞いておかないと話の流れに決着がつかないので
お願いします
>>263 最適化が可能なProf版買えば?('A`)
ダイアログベースのプログラムを作るとき、プログラム共通で使用する変数は CHogeApp で宣言するか CHogeDlg で宣言するかどちらがいいのでしょうか?
お好きな方で・・・・ #内容による・・・・・・・・・・・ それが分からないなら設計から見直ししろ
描画を一定時間ごとに表示させたいのですが、何故か動かないんです。 case WM_CREATE: SetTimer(hWnd, 1, 1000, NULL); case WM_TIMER: if(Time == 0) Time = 1; case WM_PAINT: for(n=0 ; n<MAX ; n++){ if(Time == 1){ //Time=1だったら描画開始 //描画イベントコード } Time = 0; } for文内の処理を一定時間ごとに行うというようなことはできないのでしょうか?
>>267 WM_TIMERで描画しては伺か?
WM_TIMER:
RedrawWindow();
break;
タイマーイベント中に描画すればいいだけの話では?
>>263 速度が気になるなら「仮想リストビュー」を使え
Visual C++.net Standard Version 2003 ってWindows Meじゃインストール出来ないんですか? バカバカしい質問ですみません・・・
Windows Me で開発してる人キタ━━━━━(゚∀゚)━━━━━ ?
275 :
デフォルトの名無しさん :03/11/30 20:47
キタ━━━━━(゚∀゚)━━━━━ ?ってまだ使ってるの?
>>265 どっかのクラスにメンバ作って、
その他のクラスにポインタ渡す。
>>276 そのクラスをグローバルに宣言するなんだよな。
>>268-269 case WM_PAINT:
for(int i=0 ; i<100 ; i++)
{
char sz[2];
wsprintf(sz, "%02d", i);
TextOut(hdc, 10*i, 10, sz, (int)strlen(sz));
Rectangle(hdc, 10*i, 0, 10*(i+1), 10);
}
break;
といったプログラムで、□で囲まれた1, 2, 3…を1秒おきに表示することを考えているのですが、
WM_TIMER内で、RedrawWindow()やInvalidateRect()できるのでしょうか?
できたら御免なさい。どうやってもできなかったもので。
(実際に作成するのは、数字をランダムに配置します。今回は簡単な例で表記しています。)
つかWM_PAINTでデバイスコンテキストは取得しないのか
>>278 szは2文字分のスペースしかないから>279が言うようにナル文字が溢れる。
余計なメモリを喰うわけじゃないからchar sz[4];とでもしときなさい。
>>277 MFCだとすでにひとつはグローバルになってるからそれ使えばいーじゃん。
じゃあ元質問の
>>265 ではCHogeAppじゃん
すげー回りくどい回答
>>283 は ::AfxGetApp() と ::AfxGetMainWnd() を知らんのか?
VC++6で、classの列挙型のインテリセンスは使えないの? class abc{ enum{a,b,c}; }; abc::a;//ってやつ
289 :
デフォルトの名無しさん :03/12/03 01:37
vc2003でコンソールアプリを作っていますが、コンソールへの出力を 表示するのはどうすればいいのでしょうか? コマンドプロンプトから実行した場合は、正常に表示されます。
290 :
デフォルトの名無しさん :03/12/03 01:45
>>289 コンソールアプリならコマンドプロンプトに表示されればいいんじゃないの???
291 :
デフォルトの名無しさん :03/12/03 01:47
>>290 VisualStudioから実行した時でも、結果を表示したいのです。
可能でしょうか?
表示はされてるだろ。終了時にすぐ閉じるけど。
>>291 終了直前(mainの最後とか)にgetchar();とか入れておけば。
294 :
デフォルトの名無しさん :03/12/03 01:55
>288 class abc{ public: enum XXX{a,b,c}; }; abc::a
/* 入力した文字をそのまま出力 */ while ((c = 月藤茶()) != EOF) { 腐頭茶(); }
>>289 たぶん表示されているのは?
動体視力を鍛えて、もう一度チャレンジ!
>>293 わかりました。
みなさん、ありがとうございました。
>>294 abc::XXXのインテリセンスは機能しますが、
abc::aはでませんよね・・・?
設定が悪いのかな・・・・。
299 :
頭わるいんです :03/12/03 09:07
DLLを作成した事がないのですが、 VisualC++.NETによるDLLの作成方法を教えて下さい。 EXEをつくるのとどう違うのでしょうか?
300 :
デフォルトの名無しさん :03/12/03 09:12
>298 abc::XXX までです。 もしかする方法があるのかも知れませんが。
>>291 ctrl+F5 で実行しましょう。
プログラムが終了すると一旦止まります。
デバッグはできなかったと思います。
>>279-282 回答ありがとうございます。
UpdateWindowもできなかったので、メタファイルで強引にアニメ化させてみました。
どうもでした〜。
303 :
デフォルトの名無しさん :03/12/04 00:48
ライブラリの作成の仕方について教えて戴きたい者です。
JPEG画像を読み込むソフトをつくりたいのですが、かなり苦戦しています。
JPEGを読み込むには、フリーで提供されている「libjpeg」というソースをライブラリ化することで可能だということは調べたのですが、
いかんせん初心者で、ライブリのつくり方がよくわかりません。
ttp://tanack.hp.infoseek.co.jp/libjpeg.html ttp://www.amy.hi-ho.ne.jp/jbaba/jpeg1.htm に詳しいやり方がのっていたのですがうまくいきませんでした。
1・コンソールから「make」で作成する
2・Win32 Static Libraryでワークスペースを作成しメイクする(メイクするとは何をすることでしょうか?)
というの2つの方法を試したのですが...
結果
1・'make'は内部、外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません
2・ビルドすると9箇所で同じエラー、warning C4005: 'FAR' : マクロが再定義されました。
となり、ライブラリが作成されませんでした。
かなり自分勝手な質問で大変申し訳ないのですが、知恵を貸していただけないでしょうか。
宜しくお願いいたします m(_ _)m
開発環境:WinXP VC++ Ver.6.0
<libjpeg>
ttp://www.ijg.org/
FARの再定義自体は、警告であるから他にエラーが出たんだろう。 makeはVC++ならvcvars32をやってからnmakeだが。
ATL (CImage) か、WebBrowserコントロールを使ったほうが早いという罠。
>>304 回答ありがとうございます!
1行目の警告への対処はわからないままですが、
2行目の「vcvars32」で検索してみると、いろいろでてきました。
コンソール上から操作するにはいろいろ手順を踏む必要があるのですね...
ただ「make」とうてばよいものだと勘違いしていました。
頑張ってみます。
>>305 >>307 むむむ・・・
なにやら便利そうですね。
ぜひ使ってみたい!・・かったのですが、
さらりと検索しみても全く意味不明でした・・申し訳ないです(´д`)
C言語を学び始めてまだ数ヶ月、もう少し基本操作を学んでおきたいのです,,(゚Д゚)
こやつに決着がつき次第、もう少し突っ込んで調べて見たいと思います。
ありがとうございました m(_ _)m
リサイズ時にウィンドウがちらついて非常に気になります。 何か良い手はないでしょうか? WM_PAINTの中でCreateCompatibleDC()で互換DCを作って そこに描いてBitbltで元のDCに転送しています FillRect()だけでも激しくちらつくのはやるせないです
310 :
デフォルトの名無しさん :03/12/04 09:48
bitmapをバッファにしてストレッチビルトすてみてはどう。 ビデオカードが高速ならばあまり気にならないが。
ちやんとWM_ERASEBKGNDは潰してゐるか?
GDI+を使いたくないならOleLoadPicturePath()がいいかもね
>WM_PAINTの中でCreateCompatibleDC()で互換DCを作って >そこに描いてBitbltで元のDCに転送しています バックバッファに描いてるのにWM_PAINTの中でっておかしくない? WM_PAINTでは普通BitBltのみじゃないっけ?
315 :
デフォルトの名無しさん :03/12/04 14:09
#defineIDC_LIST200//cppの先頭のグローバルの位置に記述 char* Buff;//cppの先頭のグローバルの位置に記述 //以下ウィンドウの表示関数内での記述 HWNDhWnd; HWNDhLIST; hLIST=CreateWindow("LISTBOX","",WS_CHILD|WS_VISIBLE ,100,100,100,100,hWnd,(HMENU)IDC_LIST,hInstance,NULL); Buff="あぼ"; SetDlgItemText(hWnd,IDC_LIST,Buff); メインウィンドウ上にLISTBOX表示しようと思い、このように書いたのですが、あぼ がでません。 ちなみに、他にメインウィンドウ上には何も書いてません。 いったい、どうなっちゃってるんでしょ。
316 :
デフォルトの名無しさん :03/12/04 14:15
>>315 の訂正です。
SetDlgItemText(hLIST,IDC_LIST,Buff);
~~~~~
#define IDC_LIST200//間空ける
HWND hWnd;//間空ける
HWND hLIST;//間空ける
お願いいたします。
SetDlgItemTextの親元のハンドルをhWndにして、STATICTEXTでやったら あぼ がでました。 どうやらLISTBOXにはSetDlgItemTextは効かないような気がするのですが・・・。 どのようにすれば良いでしょ?
>>318 すみません、ありがとうございます。
まだ、猫のレベルでうろついてます。トホホ・・・
クレーを飛ばしてみたいんだが
射撃場にいくか自分で投げるしかないんじゃないか それかパチンコのような物を自転車のチューブで作って飛ばすとか
>>311 ありがとうございます。ちらつきが消えました。
こんなイベントもあったんですね・・・
>>314 すみません。よく分かりません。
バックバッファに色々な物を描いてから表示するようにしています。
サイズを変えるとCPU使用率が高くなり、
ウィンドウを小さくすると、少しの間、跡が残るのはどうにかなるんでしょうか。
サイズを変えても描画の必要が無い所は描かない、
部分的に描画する等は可能でしょうか?
IME等に使われている変換候補ウインドウはどういったものでしょうか? (DirectXフルスクリーンアプリでもゲームが中断されない) 調べたいのですが、検索すべきキーワードが分かりません。 ご存じでしたら、ご教示下さい。
#include するヘッダファイルを増やした時に 「再定義されました」などのエラーが続出するのですが考える原因はなんでしょうか? もちろん、各ヘッダファイルの先頭に #pragma once を記述しています。
a.h: #pragma once #define AKECHI KOGORO b.h: #plasma once #define AKECHI MITSUHIDE c.c: #include "a.h" #include "b.h" // 再定義されますた
>>325 #ifndef〜#endif等を使ってないからだろ。
328 :
名無し@沢村 :03/12/05 01:45
>>327 #pragma once
#pragma once
#pragma once
331 :
デフォルトの名無しさん :03/12/05 12:55
メッセージボックスの中にあるボタンを動的サブクラス化したのですが、 見えないボタンになってしまいました。 TRACEやMS-Spy++等で調べてみたところ、動的サブクラス化は 一応成功していましたが、どうやら、フレームワークで呼び出されるはずの DrawItem関数が呼び出されていないのが原因のようです。 WM_DRAWITEMメッセージで代用しようとしましたが これも駄目でした。 自前のダイアログボックスのだと成功するのに…。 DrawItem関数を呼び出されるようにするには、 どうすれば良いでしょうか? VC++.net、MFCです。
Temporary Internet Files フォルダ内にあるファイルをCopyFileでコピーしようとすると戻り値0でエラーになってしまうのですが、 このフォルダ内のファイルをコピーする場合どのようにすればよいのでしょうか?
すいません、自己解決しました。
MFCクラスを継承したclass Aをさらに継承したclass Bというクラスを ClassWizardからみれるようにするにはどうすればいいのでしょうか? メニュー[挿入]-[クラスの新規作成]からclass Aを作成します。 ↓ class AはClassWizardから見える メニュー[挿入]-[クラスの新規作成]からクラスの種類をGenericクラスとし 基本クラスにclass A指定しclassBを作成します。 ↓ class BはClassWizardから見えない
>>334 一旦閉じて.clwを削除して再度開く(無保証)
>>335 .clwを削除だけではダメでしたが、できました。
ありがとうございました。
Spy++ みたいに他のウインドウへのメッセージを監視したいのですがどのようにすればよいのでしょうか?
>>326 プラズマ once ってなんかすごそうだな。
て言う、お約束の突っ込みは置いといてこのケースは #pragma once じゃダメだろ。
どうしてもやりたいなら、
a.h
#ifndef AKECHI
#define AKECHI KOGORO
#endif
b.h
#ifndef AKECHI
#define AKECHI MITSUHIDE
#endif
ってやるしかないと思うけど、インクルード順序に依存して値が変わるマクロってなんか怖いぞ。
まあ、
>>328-329 はヴァカだと言うことはよくわかったけど。
ワロタ
つーか、どこからプラズマが出てくるんだ?
つーか
>>326 は質問者じゃないのに何でそれを元に回答してんだ・・・
いや、単純にマクロ再定義したんだろ。どこまで引っ張るんだ。
作っているソフトの起動に時間がかかるのでVS.NETとかPhotoshopのように、起動時にスプラッシュ?みたいなのを表示しようと思い、CDialogから派生して作ってみました。 CLogoDlg logo; logo.Create(IDD_DIALOG_LOGO); logo.ShowWindow(SW_SHOW); これだと、アプリが起動した後だとうまくいくのですが、起動中に表示しようとしても、ダイアログ上のコントロールが表示されず。ベースの灰色の部分しか表示されません。 そして、完全に起動した後に、ダイアログ上のコントロールが表示されてしまいます。 ちなみにDoModal()だと起動中、起動後関係なくダイアログ上のコントロールが表示されますが、それだとアプリの起動が止まってしまいますし・・ どうしたらよいでしょうか?
age
時間のかかる処理は別スレッドに汁
VC++6のエディットボックスの文字入力で、 Enterを押すと改行するようにしたいのですがどうすればいいでしょうか。 現在、プロパティの「複数行」と「改行を許可」にチェックを入れているのですが これ以外にも設定が必要でしょうか。
はじめまして、C++でプログラム作成するのですが問題が解けません。 問題は、入力された2つの整数の差の絶対値を出力するプログラムを作成しなさい。整数には、 負数を入力される場合も考慮する。 次のプロトタイプ宣言を持ち、変数n1とn2の差の絶対値を戻す関数を使用すること。 int Absolute(int n1,int n2) 入力は、キーボードから(getcharを使うこと)。 エラー仕様で、9桁以上の文字列が入力された場合、先頭から8桁のみを有効とし、9桁以降を無視する。 また。数値以外の文字が入力された場合、Enterキーのみ、または、'−'のみが入力された場合は、エラーメッセージを 表示して終了する。 この問題を解けるかたがいましたら、解答をお願いします。
int Absolute(int n1,int n2) { if(n1 > n2) { return n1 - n2; } else { return n2 - n1; }
いまどきgetchar()なんかで入力してられるかよ
ライブラリ使ったらだめなのか
つーか、宿題スレに同じ問題あるよ。
>>353 宿題は自分の力でやれよハゲ!
こんな簡単なものも出来んようじゃ止めちまえ!
というか、これC++の問題なのか?マジで
360 :
デフォルトの名無しさん :03/12/08 06:42
参考にならないようだ
流れを読まず書き return (short int)n1 - (short int)n2;
VC++6のエディットボックスの文字入力で、 Enterを押すと改行するようにしたいのですがどうすればいいでしょうか。 現在、プロパティの「複数行」と「改行を許可」にチェックを入れているのですが これ以外にも設定が必要でしょうか。
リソースファイル(*.rc)の保存をしないと、反映されないよ。
>>362 「垂直オートスクロール」が有効でないと、エディットボックスの高さ分の
行数しか受け付けないみたいだけど、そういうことじゃなくて?
>>362 新規作成でダイアログにエディットボックスだけ作ってやってもダメ?
もちろん「複数行」と「改行を許可」と「垂直オートスクロール」を有効にした状態で。
それでうまくいくなら原因は362の文章の中には無いな。
思いつくこととしてはPreTranslateMessageでEnter無効にしてるとか。
_ , '⌒ ⌒\ \\ ノノレノ ))) (○) 〒〒|ノ 'へ゛゛∀ノ <まるぽ
質問です。 あらかじめ式を何かファイルに保存しておき(例えばY=A+B その右辺の値(この例でいうとAとBの値)を入力させて左辺の値を求める というものを作りたいのですが どのような方法を使うとできるのでしょうか。 例えばAに2を入れるとした場合 Aを2に置き換えるという正規表現?というのを使えば なんとなくできそうな気はするのですが・・・ どこかのサイトでVCに正規表現はないというのを見たので。 となると、他の言語とリンクさせる必要があるのでしょうか。 調べてみたのですがVCでどうやるかがちょっと分からなかったので 質問させていただきました。 VC++6.0を使ってます。よろしくお願いします。
369 :
デフォルトの名無しさん :03/12/09 20:10
Visual C++ 6.0を使用しています アドレスを指定して、そのアドレスの領域の値が書き換わったら プログラムが止まるようにしたいのですが、方法はないでしょうか? (止まらなくても場所がわかればよい) よろしくお願いします
>>369 デバッガのブレーク条件を設定して、デバッグ実行する。
>>368 はっきり言うと簡単にはできない。
Perlのeval()でやっては伺か?
CodeGuruにその手のクラスがあったと思うが。
(;´ー`)y-~~.。oO(
>>372-373 正規表現で置換したあとどうやって左辺値を求めるんだよ…)
っと駄レス。そういや、boost::spiritってのもあるな。
376 :
デフォルトの名無しさん :03/12/10 01:27
すいません、お伺いしたい儀があるのですが、 ループ文の「for」「while」「do while」文は、 具体的にどういう風に使い分ければいいのでしょうか??
>>376 「for」一定の回数ループするときに。(いろいろ使えるけど)
「while」ループ終了評価をループ処理より前にやりたいとき。
「do while」ループ終了評価をループ処理後にやりたいとき。
>>377 すっきりしますたアリガd!(´▽`)
独学でやってるもんで、誰にも聞けないので、
気になって気になって・・・
>>376 蛇足だが
whileとforはほぼ一緒だ。
一つ注意しなければならないのはcontinueだ。
初期化;
while(条件){
if(処理スキップ) continue;
処理;
条件更新;
}
とうかつにやってしまうと条件更新されないぞ。
後、do while は評価するために処理を1回行う必要がある場合に使う。
printf("続行しますか?(y/n)>");
do{
キー入力;
}while(yでもnでも無い間);
whileだとキー入力を2回記述する必要がある。
printf("続行しますか?(y/n)>");
キー入力;
while(yでもnでも無い間){
キー入力;
}
色々とMSDNを探しても見つからないので質問させていただきます。 ツールバーを作った時にアイコンを作っているのですが 使用できる色が16色しか使えないです。 これは仕様なのでしょうか? 256色から選んで、それをパレットとして保存してリソースファイルに 読み込ませることによって色の変更は出来るとMSDNに書いてあったのですが 同時に使用できる色の追加が出来ないのです。 またコンボボックス等に 黒■ 白□ のように表示をさせたいのですが 文字は出ても色が同時に表示されないのは 何が必要なのでしょうか?
380の続きです。 メニューでも同様に表示させるために void CMainFrame::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) { BITMAP bm; CBitmap bitmap; bitmap.LoadOEMBitmap(OBM_CHECK); bitmap.GetObject(sizeof(bm), &bm); CDC dc; dc.Attach(lpDrawItemStruct->hDC); CBrush* pBrush = new CBrush (::GetSysColor((lpDrawItemStruct->itemState & ODS_SELECTED) ? COLOR_HIGHLIGHT : COLOR_MENU)); dc.FrameRect(&(lpDrawItemStruct->rcItem), pBrush); delete pBrush;
381の続きです。 if (lpDrawItemStruct->itemState & ODS_CHECKED) { CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap* pOldBitmap = dcMem.SelectObject(&bitmap); dc.BitBlt(lpDrawItemStruct->rcItem.left + 4, lpDrawItemStruct->rcItem.top + (((lpDrawItemStruct->rcItem.bottom - lpDrawItemStruct->rcItem.top) - bm.bmHeight) / 2), bm.bmWidth, bm.bmHeight, &dcMem, 0, 0, SRCCOPY); dcMem.SelectObject(pOldBitmap); } UINT itemID = lpDrawItemStruct->itemID & 0xFFFF; // Fix for Win95/98 bug pBrush = new CBrush(gColor[itemID - ID_COLOR_BLACK]); CRect rect = lpDrawItemStruct->rcItem; rect.DeflateRect(6, 4); dc.FillRect(rect, pBrush); delete pBrush; dc.Detach(); } としています。 この作りを基本として貼り付けてみたのですがうまくいきません。 VC++.net EEです。 宜しくお願いします。
>>380 ツールバーに関しては、256色のDIBをビットマップリソースに保存しといて
起動後にSetImageListでツールバーに割り当てる。
>>371-375 レスありがとうございます。
boostですか・・・初めて聞きました。
教えていただいたURLを参考にしてちょっと頑張ってみます。
PerlとかRubyとかも検討してみたほうがよさそうですね・・・
みなさんありがとうございますm(__)m
385 :
デフォルトの名無しさん :03/12/10 23:24
EXEからDLLファイルの変数へアクセスする方法が分からないのでよろしければ教えていただけないでしょうか。 初心者なりにぐぐってみましたがさっぱりわからないので、せめて検索のキーワードだけでも教えていただければありがたいでつ。
>>385 DLL の方で変数をエクスポートしてないと無理
キーワードとしては「init_seg」あたりかな…
387 :
デフォルトの名無しさん :03/12/11 11:07
コモンダイアログ(バージョン情報のやつ)が 表示される直前にフックして、 コモンダイアログ上に小ウィンドウ(エディットボックス)を 動的に生成しました。 しかし、その小ウィンドウがフォーカスを受け取ると、 コモンダイアログが閉じてしまいます。 これを閉じないようにするには、どうすれば良いでしょうか? VC++.net、MFCです。
>>386 エクスポートとファイルマッピングを使って何とか解決しますた。
教えていただいてありがとうございますた。
ダイナミックヘルプでCreateWindow()を探すと英語のヘルプが出てくるんですが これを「プラットフォームSDK」にある日本語ヘルプを出すように出来ないでしょうか? 何せVC++使うのは初めてなものでよく分かりません・・・ フィルタを設定したり、カテゴリの優先順位を変えてみたりしたんですが一向に日本語ヘルプが出てきません。 検索すれば出てくるんですけどね。 環境は VC++.NET 2003 Std です。
391 :
デフォルトの名無しさん :03/12/12 13:33
VC++.netを使っています。 何がきっかけか分かりませんが、 ビルド実行時にスキップが行われなくなってしまいました。 例えば、「F7」でビルドを終え、すぐさま「Ctrl+F5」で 実行しようとしても、 「このプロジェクトは古い形式で構成されています」 と表示されます。 原因に検討が付く方がいらしたら、アドバイスをお願いします。
392 :
デフォルトの名無しさん :03/12/12 13:46
>>390 VC++6.0しかもってないけど、VC++6.0では
MSDNでキーワード「CreateWindow」で検索すると
日本語と英語のリファレンスの両方がヒットしますが。
ダイナミックヘルプっつーのはよくわからんが。
2つの子ウィンドウがあり、左側の子ウィンドウのアイコンを 右側の子ウィンドウにドラッグ&ドロップで移動できるようにしようとしています。 左側のウィンドウでマウスのLボタンを押した時、ウィンドウハンドルを取得し、 離した時にもう一度ウィンドウハンドルを取得して比べて、ウィンドウ外であるか 判定しようとしています。 ウインドウ外である場合、右側のウィンドウに元のアイコンのコピーをドロップできるよう 実装したいのですがプログラムできません。。 初心者なんですがぜひ教えてください。
>>392 ダイナミックヘルプっていうのはエディタ上のAPI等にカーソルを持っていくと、
VS上のウィンドウにそのAPIのヘルプ項目が表示される機能で、
それをクリックすると目的のヘルプに簡単に移動できるそうです。
まぁ普通にMSDNで検索すれば問題ないのでいいんですが・・・
明日、本屋で漁って来ます。
スキップは行われるようになりました。 一度全てのファイルをいじり(実際にはスペースを打つだけ) それからビルドすると中間ファイルに記録されるみたいで、 以後のビルドにおいてスキップするようになりました。 しかし何度ビルドしても実行時に「古い形式で・・」という メッセージが出てきてビルドし直す必要があります。 先ほどは何がきっかけかわからないと書いたのですが、 よく考えたら一度中間ファイルを削除したのがきっかけだた かも知れません・・・。 どうすれば完全に元にもどせるのでしょうか・・。
VC++.net って2003なのか?
2002です。
上のほうでboostを教えていただいたものです。
ちょっと板違いですが質問させてください。
早速DLして設定してみたのですが
http://www.kmonos.net/alang/boost/ にあるサンプルをそのままビルドしてみても
いくつかエラーが出てしまいました。
date_timeのIO機能、regex、thread、python、signals、test、filesystemライブラリは
使う予定はないのでヘッダをインクルードするだけでできるはずなのに
「〜が未解決です」や「〜のメンバではありません」などとエラーが出て実行できません。
数学関数ライブラリの中の「uBLAS」は正常に動くのに
「interval」が動かなかったりと
動くものもあるのですが
使いたいものがうまく動かないので困っています。
設定がうまくできてないというのが原因のような気はするのですが・・・
もしboostを使ってる方がいましたら
何かアドバイスよろしくお願いします。
2002は窓から(tbs
>>399 その説明じゃ足りん。具体的にどれをコンパイルしようとしたのか限定汁。
〜は未解決ですはライブラリ化が必要なやつとしか思えないが。
>>399 ライブラリとヘッダファイルのパスは設定しましたか?
数学関数のintervalをコンパイルしてみた結果、 'sqrt':'std'のメンバではありません。 シンボルを宣言の中で使用できません。 など48個エラーが出ました。 同じ数学関数ライブラリのrationalをコンパイルしてみると 普通に実行できました。 他のものも、できないものがたくさんあるのですが エラーがそれぞれ違かったので詳しく書きませんでした、すみません。 パスはこの参考にしたページの「インストール方法」を見ながら インクルードファイルにboostを追加しました。 それ以外に設定する必要があるのでしょうか?
404 :
デフォルトの名無しさん :03/12/13 06:10
質問があります。 入門したばかりなので、ちょっと根本的なことがわかりません。 Win32プロジェクトで PlaySound を記述したところ、 ”未解決の外部シンボル __imp__PlaySoundA@12 が関数 _WndProc@16 で参照されました。” というエラーメッセージが表示されてしまいコンパイルできないのですが、どうすれば解決す るでしょうか? 利用しているのは VC++.NET2002 Academic です。
書き忘れました。 プログラムの先頭に #include <windows.h> だけが記述されています。
>>404 プロジェクトのプロパティダイアログの
[構成プロパティ-リンカ-コマンドライン]ページの[追加のオプション]に
Winmm.lib を追加でOK。
PlaySound関数にカーソルを合わせF1を押して起動したヘルプの下の方にある
Library: Use に書かれてあるファイル名を追加すればOK。
Windows NT/2000: Requires Windows NT 3.1 or later.
Windows 95/98: Requires Windows 95 or later.
Header: Declared in Mmsystem.h.
Library: Use Winmm.lib. ←――――――――ここね!ここ!
Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000.
あまり使わない関数を利用するからくりは、初めから設定されていないことが多いので、
今後同じような場面に直面したときも、同じやり方で解決できる。
ソースに #pragma comment(lib, "winmm.lib") を追加する手もある。
すみません、教えていただきたいのですが、for文のところで、 #include <iostream> using namespace std; int main(){ int ch =0; for(int a=0;a<5; a++){ for(int b=0; b<5; b++){ if(ch==0){ cout<<'*'; ch = 1;} else{ cout <<'-'; ch = 0;}} cout << '\n';} return 0;}
と記述すると、 「 *-*-* 」 と出力されますが、どうにも納得いきません・・・。 aが一回実行されるたびに、bが五回(0含め 0、1、2、3、4) 実行されるならば、*(a)-(b)*(b)-(b)*(b)-(b) と出力されるのでは?と引っかかって、前に進めません・・・。 具体的な処理の進め方と、僕の間違いを修正していただけませんか? どうかお願いします。
すみません、ちなみに環境は、 visual c++ 6.0, windows 2000pro sp3, です。 よろしくお願いします。
MFCを使わずに開発してる人は、毎回 CreateWindowEx() とかしているのでしょうか? それとも自家製ウィンドウクラスやらボタンクラスやらを作り置きしているのでしょうか? DelphiからVC++に移行したばかりの糞野郎は黙ってMFCでもやってりゃいいんでしょうか?
>>410 (a=0) -> { { {*} {-} {*} {-} {*} } \n }
(a=1) -> { { {-} {*} {-} {*} {-} } \n }
(a=2) -> { { {*} {-} {*} {-} {*} } \n }
(a=3) -> { { {-} {*} {-} {*} {-} } \n }
(a=4) -> { { {*} {-} {*} {-} {*} } \n }
ブロック構造というかC言語の勉強でもしろ。
>>413 !!にゃるほど!!
分かりもうした。(*_ _)人
低レベルな質問でゴメンナサイ ・・・
>>413 ありがとう!!
>>412 最初はそれやってたが、
いちいちプロシージャー作るのがめんどくさくなったから、
クラス作ったよ。
まぁそんなもん作るくらいなら最初からMFCやれって感じだけどなw
VC++6.0 MFCのSDIかなんかで、ダイアログにエディットボックスをくっつけました。 タブオーダでそのエディットボックスが初期選択されるようにしたのですが、 エディットボックスに初期値をいれると、値が選択された状態で表示されます。 ボックス内の文字(値)の有無に関わらず、キーカーソルを値の先頭に持ってくにはどうすればよいのでしょうか?
VC++ 2003です。 ウィンドウのタイトルバーについての情報を取得するため、 CWnd::GetTitleBarInfo() という関数をMSDNで見つけたのですが、 <windows.h> <winuser.h> をincludeしても「GetTitleBarInfo()が定義されていない」という趣旨の エラーが出ます。まだ他に何か、includeが必要なものがあるのでしょうか?
>>419 MFC ライブラリ リファレンス
CWnd クラス
(省略)
必要条件
ヘッダー : afxwin.h
422 :
デフォルトの名無しさん :03/12/15 13:58
ある子ウィンドウで、 子ウィンドウが受け取る ある特定の通知メッセージを 親ウインドウに飛ばさないようにするには どうすれば良いでしょうか?
423 :
デフォルトの名無しさん :03/12/15 18:29
SetCursorPosでマウスカーソルを別のウインドウの上に 持っていくとこまでは出来るのですが、マウスをクリック したメッセージ(WM_LBUTTONDOWN)を別のウインドウ に送るにはどうしたらよいでしょうか?
424 :
デフォルトの名無しさん :03/12/15 22:36
>>423 別のウインドウハンドルに対して
SendMessage で送れませんかね?
426 :
デフォルトの名無しさん :03/12/15 22:54
VC++6 MFCベースでダイアログアプリケーションを開発しています。 ダイアログに貼り付けたボタンが表示されているか非表示なのか プログラムで取得するにはどうすればよいでしょうか? 表示、非表示を条件分岐の判定に使用したいんです。よろしくお願いします。
IsWindowEnabledかな
いやIsWindowVisible()でしょう
>427-428 ありがとう!試してみます。
プログラミング激しく初心者なのですが まず何を用意すればいいですか?
検索能力
人に聞かずに自分で調べようとする能力
妹
おとなしく店言って何のソフトが必要か聞いてきます
ていうかスレタイ見てね。
436 :
デフォルトの名無しさん :03/12/16 18:17
CとC++文法はそれなりに理解していて VC++.NETの使い方を学びたい場合、 林晴比古の「新Visual C++.NET入門 ビギナー編」 で問題ないでしょうか? それとも他にいい書籍はあるでしょうか?
438 :
デフォルトの名無しさん :03/12/16 21:13
VC++6.0 持っています。 ここ数年はスクリプト言語しか使っておらず、再度C++挑戦しようと考えています。 (#GUIの小さいアプリはCでゴリゴリ作ったことはありますが、C++はこれからです。) C++で、C++らしい書き方をするに boost.org のライブラリを使用しようと考えているのですが、 VC++6.0だと古いせいか動作しないものが多いようです。 VC++6.0 + Intel C++8.0追加購入 とVS.NET2003アップグレード どっちがよいのか識者の方アドバイスを 御願い致します。 (#コスト的にはあまり変わらないです。)
VC++から、今開いているプロセス名を取得するにはどのようにしたらよいのでしょうか?
440 :
デフォルトの名無しさん :03/12/17 01:34
VC++って、コントロール配列ってないんですよね? どうにかしてコントロール配列に相当するものができないでしょうか?
>>440 コントロール配列がなんたるかを説明してくれw
配列をメンバ変数で定義してDDXに突っ込む。以上
std::vectorとか?
は?CButton b[256];だろ。
445 :
デフォルトの名無しさん :03/12/17 10:18
VC++の超初心者です。 プロジェクト名の途中変更というのはどのようにすればいいのでしょうか? WEBで調べていたらVC++はVer6からプロジェクト名の変更が簡単という記述を 見つけました。 ただ、やり方までは書いてありませんでした。 もしどなたかわかる方がいらっしゃったらよろしくお願いします。
>>445 UIからは変更できないはず。
.ncb とか .opt とか消して、.dsp と .dsw の該当個所を置換、でいけると
思うが、それが簡単かどうかは...
447 :
デフォルトの名無しさん :03/12/18 22:17
VC++.NETを使い始めたものです。書籍に 明示的に型変換をすることで不要な変換を避けることができる という記述があったので、コンパイルしたときのコード量に違いが出るのかな?と考え #include <stdio.h> main() { // 1 double dval1 = 1.1; int ival1 = 1; ival1 += dval1; // 2 double dval2 = 2.2; int ival2 = 2; ival2 += static_cast<int>(dval2); } このようなコードを書いてコンパイルされたときの1と2の違いをアセンブリで確認したいのですが やりかた(VC++.NETでアセンブリコードを見る方法)がわかりません。 もしよければ教えてください。
>>447 プロジェクトのプロパティの
C/C++の出力ファイルのアセンプリの出力
>>447 で?それが分かったとしてなんになるんだ?
450 :
デフォルトの名無しさん :03/12/19 03:04
「プログラミングMicrosoft Visual C++ 6.0マイクロソフト公式解説書」 っていう本に、スモールブロックヒープよりも大きい領域を確保した場合は、 _heapminを呼び出しなさいって書いてあるんですが、これって最近のWin2000 とかXPで開発してる場合も当てはまるんでしょうか? deleteの後に_heapminって いちいち書くのかな。
>>448 出力フォルダにhoge.asmというのができました。
ありがd。
せっかくのIDEなんだからデバッグ実行中にでも表示してくれたらいいのに。
>>449 1より2のほうが不要なプロモートを避けることができるから
コード量(正しい日本語なのかな..)が少なくなるのなら
for等で大量に代入するときとかに速くなるかなと思ったのですが
コード量増えてるじゃん_| ̄|○
>>452 「明示的に型変換をすることで不要なプロモートを避けることができる」
ってどういう意味なのでしょう_| ̄|○
; Line 5 double dval1 = 1.1; fldQWORD PTR __real@3ff199999999999a fstpQWORD PTR _dval1$[ebp] ; Line 6 int ival1 = 1; movDWORD PTR _ival1$[ebp], 1 ; Line 7 ival1 += dval1; fildDWORD PTR _ival1$[ebp] faddQWORD PTR _dval1$[ebp] call__ftol2 movDWORD PTR _ival1$[ebp], eax ; Line 9 double dval2 = 2.2; fldQWORD PTR __real@400199999999999a fstpQWORD PTR _dval2$[ebp] ; Line 10 int ival2 = 2; movDWORD PTR _ival2$[ebp], 2 ; Line 11 ival2 += static_cast<int>(dval2); fldQWORD PTR _dval2$[ebp] call__ftol2 movecx, DWORD PTR _ival2$[ebp] addecx, eax movDWORD PTR _ival2$[ebp], ecx
見にくかった&連貼りスマソ_| ̄|○ ; Line 5 double dval1 = 1.1; fld QWORD PTR __real@3ff199999999999a fstp QWORD PTR _dval1$[ebp] ; Line 6 int ival1 = 1; mov DWORD PTR _ival1$[ebp], 1 ; Line 7 ival1 += dval1; fild DWORD PTR _ival1$[ebp] fadd QWORD PTR _dval1$[ebp] call __ftol2 mov DWORD PTR _ival1$[ebp], eax ; Line 9 double dval2 = 2.2; fld QWORD PTR __real@400199999999999a fstp QWORD PTR _dval2$[ebp] ; Line 10 int ival2 = 2; mov DWORD PTR _ival2$[ebp], 2 ; Line 11 ival2 += static_cast<int>(dval2); fld QWORD PTR _dval2$[ebp] call __ftol2 mov ecx, DWORD PTR _ival2$[ebp] add ecx, eax mov DWORD PTR _ival2$[ebp], ecx
>>451 混合モードでデバッグしろよ
そこまでやるなら、CPU命令が何クロックかかるか調べて結論だせ
たとえばvoid Hoge(int)とvoid Hoge(CInt)があって、Hoge(4)とcall
するときに、Hoge(CInt)が呼ばれないようにする
>>451 > コード量増えてるじゃん_| ̄|○
>>452 コード量が多い=非効率 じゃないよ。
> 「明示的に型変換をすることで不要なプロモートを避けることができる」
> ってどういう意味なのでしょう_| ̄|○
この場合、
前者:doubleに変換->doubleで計算->intに変換
後者:intに変換->intで計算
文字通りの意味だろ。
456 :
デフォルトの名無しさん :03/12/19 17:09
VC6の質問です。 現在のスレッドのスタックサイズとスタック消費量を 取得するにはどう書いたらいいのでしょうか? TIB(Thread Information Block)とESPを使って 計算するのではないかと思うのですがそれから先がわかりません…。 ご存知の方、どうかよろしくお願いいたします。
457 :
デフォルトの名無しさん :03/12/19 23:55
>>451 Release版のような最適化されたアセンブラ出力見てる?
Debug版は最適化しないからかなり無駄なコード吐くよ。
459 :
デフォルトの名無しさん :03/12/20 01:53
WM_NCHITTESTでウィンドウの移動、サイズの変更を行っているウィンドウで TrackMouseEvent()を使っても正常に動作せず、 マウスカーソルがウィンドウ領域に入るとWM_MOUSELEAVEが垂れ流しになります。 WM_NCHITTESTと共存させる方法、 または他にカーソルがウィンドウ外に出て行ったことが分かる方法はないでしょうか?
やってる事が相反していた事が分かりました。 タイマーで処理する事にしました。
スタティックウインドに文字とかを描写していて、 たまに外にはみ出してしまうのがみっともないのですが どうにかしてうまく処理する方法ありませんですか?
>>461 GetTextExtent()で計算するとか
DrawText()でDT_EXPANDTABSつけるとか
463 :
デフォルトの名無しさん :03/12/20 16:25
winmainから始まらないVC++のプログラムってあるんですか?
>>463 VC++がwinmain()から始まってるかどうかソースを見たことないんで知らんが、
VC++でwinmain()のないプログラムを作ることは(当然)できる。
465 :
デフォルトの名無しさん :03/12/20 19:44
>>464 てかwinmainじゃなくてWinMainだがな。
468 :
デフォルトの名無しさん :03/12/20 22:23
gcc+linuxで作っていたプログラムをVC++6.0でコンパイルしようと思っているのですが、 例えば、 for( int i; i < 10; i++){ … } for( int i; i < 20; i++){ … } とすると、int iが多重定義されてる旨エラーが出ます。 これを回避する簡単な方法は無いでしょうか?
469 :
デフォルトの名無しさん :03/12/20 22:25
>>468 VC6 の有名なバグですね
{
for( int i; i < 10; i++){
…
}
}
{
for( int i; i < 20; i++){
…
}
}
とするしか…。
#define for if(false); else for
VC6のfor対策で結構有名な技法ね。
これで
>>469 と同じことになる。
>>469-471 さん
即答有難うございました。
これであたたかい正月が迎えられます。m(_ _)m
つーか 最悪なバグだ
バグっつうか仕様だな。 まぁfor文に定義式入れるなっつう事だ!
475 :
デフォルトの名無しさん :03/12/20 23:57
初心者だったのですが、掴み所が分からなかったC言語も「著作:高橋麻奈」の本でようやく理解できるようになりました。これ読んでC言語に入れないならまずは日本語を幼稚園から教育してもらうしかないですね。今から始める人には是非オススメしたい本です
なんつーかスレ違い。
477 :
デフォルトの名無しさん :03/12/21 00:08
C言語を始めたくても始めれない初心者もこのスレにいると思ったので紹介しておきました。そしたら超基本的な質問はしてこないかと思い…
>>473 つーか、ANSIの規格が途中で変わったから悪いんだけどね。
480 :
デフォルトの名無しさん :03/12/21 01:42
こんばんわ。 UNIXでいう "profile" を VisualC++ でやりたいんですが、 どうやればいいでしょうか?
ヘルプ嫁 ただしプロとかエンタープライズとかだったがな
482 :
デフォルトの名無しさん :03/12/21 02:44
ちょっと調べ方変えたらあっさり見つかりました。 ありがとうございました。
483 :
デフォルトの名無しさん :03/12/21 03:53
ちょっと、おしえてもらいたいんですが、cでいう関数は、 vc++では、メンバ関数というものになるのですか?
484 :
デフォルトの名無しさん :03/12/21 08:49
質問です。 3DCGやってる者ですが、エラーが出ました。 Microsoft Visual C++ Runtime Library Runtime Error! Program: C:\Program Files\AliasWavefront\Maya5.0\bin\maya.exe This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. 重いレンダリングをかけたら出たのですが、これってどうにもならないですよねぇ・・・。 月曜日に代理店に電話して確認しますが、今日日曜だし・・・時間が惜しい(泣) もし、現状PCで出来る対策があったら教えて下さい。お願いします。
>>484 CG板のAilias/Mayaスレ逝け
487 :
名無し@沢村 :03/12/21 12:55
489 :
デフォルトの名無しさん :03/12/21 16:40
クラスの新規作成でCDC派生クラスはできませんか?
手動で派生クラスを作るしかない模様
手こきオンリーですか。分かりました。
492 :
デフォルトの名無しさん :03/12/22 01:29
標準出力をVisual Studio上で見るにはどうすればいいんでしょうか? printfなどでテキスト出力して、それを見たいんですが。
>>492 標準出力ではないが、TRACE()を使うとデバッガで見れるよ。
DOSプロンプトでDebug/YourTargetProcess.exe > foo.txtとでも実行して foo.txtを開けばいいんでない? 或いはプロジェクトの設定でも同様のことができるし。
495 :
デフォルトの名無しさん :03/12/23 02:02
>Setargv.obj ファイルをリンクすることによってワイルドカードを処理します コマンドライン引数のワイルドカード対応って、これだけで良いんだ。ヤター と思いきや >引数をダブル クォーテーション (" ") で囲むと、ワイルドカードが展開されません。 この仕様(?)って、どうなん? ahya.exe "c:\(・∀・)イイ!!\video\*.mpg" なんて受け取ったら、結局自分で展開するしかないのですか?
何の話だ
>>495 ahya.exe "c:\(・∀・)イイ!!\video\"*.mpg
498 :
デフォルトの名無しさん :03/12/24 16:40
モードレスダイアログがアクティブになった状態を受けるにはどうしたらよいのでしょうか?
解説サイトを見ると作業フォルダようにc:\workというフォルダを作って そこにファイルを作ってgccすると書いてあって、そのとおりやってもできないんですが、 どうすればいいのでしょうか?
まず質問するスレを変える。
どこで聞けばいいのでしょうか?
>>499 C言語スレ池。スレッドの検索の仕方がわからないなら
PC初心者板池。
親切にありがとうございました。
506 :
デフォルトの名無しさん :03/12/25 15:05
windowsでマイクロ秒でSleepしたいんですが、 今はとりあえず timeval tv; tv.tv_sec=0; tv.tv_usec=100; select(0,NULL,NULL,NULL,&tv); なんてしてます。 APIでさっくりできるのってないんでしょうか?
507 :
デフォルトの名無しさん :03/12/25 18:56
PrintHookProcを指定して 印刷コモンダイアログを表示させると、 古いスタイルのダイアログになってしまいます。 新しいスタイルのダイアログにするには、 どうすれば良いでしょうか?
>>506 そういう API はないと思う。
つか、その常套手段を知ってる君は初心者と言えるのか!?
WaitableTimerは100ns単位で設定はできるが、 そのselectにしても、µsの精度は出ないはず。
>>507 よくわかんないけど PRINTDLG 構造体を渡しているのなら
そのメンバーの lStructSize の値が関係しているかも。
その場合、SDKがある程度新しくないと難しいと思う。
そもそもμs単位でSleepさせる意味がわからん。
EXEファイルのあるディレクトリを知るには ::GetModuleFileName() してから、最後の\以降を切り取るしかないのでしょうか?
>>508 WIN32APIスレのほうがよかったような気もする。スマソ
>>511 タイトなループをしているスレッドがあって、
ループ毎に1msのSleepすると処理速度が遅くて、
SleepさせないとCPU使用率がすごく高くなるから
もっと短い時間のSleepさせたいの。
>>509 WaitableTimer イイ!!
>そのselectにしても、sの精度は出ないはず。
別に100s丁度Sleepしてくれる関数じゃなくて
単純に1msよりもっと短い時間ブロッキングしてくれる
select関数でよかったから使ってみた。
もしかしてselectのタイムアウト時間の誤差ってすごく大きい?
thread priorityで一番遅い奴を指定してはいかがか? CPU使用率が100%近くてもGUIの入力を受け付けさえすれば問題 ないんでしょ?
>>516 何回かに1回Sleepでもいいんじゃないの?
517氏の言うようにThreadPriority下げてもいいかと。
PathRemoveFileSpecの方が楽かと
519ですがAPIスレと勘違いしてました あと、正しくは _splitpath です
>>516 ホントにキッカリ1msのSleepになってるか?
精度はちゃんと高めた?
WM_PAINTメッセージを受信時の描画処理について質問です。 描画自体はされているし、フォォントの種類も正しく変更されるのですが、 フォントのカラーだけが全く反映されません。 メモリデバイスコンテキストを使わず、直接デバイスコンテキストに描画 するようにすれば、ちゃんとカラーも反映してくれます。 何が原因なのでしょうか。 hdc = BeginPaint( hWnd, &paint ); hdcMem= CreateCompatibleDC( hdc ); hBmp = CreateCompatibleBitmap( hdcMem, w, h ); SelectObject( hdcMem, hdcBmp ); DeleteObject( hdcBmp ); SelectObject( hdcMem, hFont ); SetTextCharacterExtra( hdc, 0 ); SetTextColor( hdcMem, RGB( 0x00, 0xff, 0xff ) ); SetBkColor( hdcMem, RGB( 0x40, 0x40. 0x40 ) ); TextOut( mHdcMem, 0, 0, str, strlen( str ) ); BitBlt( hdc, 0, 0, w, h, hdcMem, 0, 0, SRCCOPY ); DeleteDC( hdcMem ); ::EndPaint( hWnd, &paint );
TextOutの mHdcMem は、hdcMemです。 抜粋なので修正し忘れてました。
>hBmp = CreateCompatibleBitmap( hdcMem, w, h ); 作成時、CompatibleDCにbindされているのは1*1のモノクロだから。 このhdcMemが指定されるので、ComaptibleBitmapがw*hのモノクロに なってしまう。 hdcMemをhdcにすれば大丈夫のはず。
ちゃんと反映されました。 メモリデバイスコンテキスト作成後は、常にメモリデバイスコンテキストを使用しなければならないと 盲目的に信じ込んでしまっていました。 ありがとうございます^^
>>516 タイトなループでは、時々
Sleep(0) ;
をしろ、って先輩に言われたことがあります。
528 :
デフォルトの名無しさん :03/12/28 10:53
c++6.0のリソースエディタで、ダイアログボックスを作成して、 ラジオボタンを配置したのですが、そのラジオボタンの、 ウィンドウハンドルは、どうやって取得するのでしょうか。 ご教授おながいします。
>>528 VisualStudioの話だと仮定して。
#つーか、C++6.0ってなんだよ。
リソースIDから拾える。
或いはClassWizardで変数に割り当てて、それから拾ってもいい。
#休みで手元にVisualStudioがないのでそれ以上は知らん。
CWnd* GetDlgItem(リソースID); だったかな というかメンバ変数に登録しろ (C++6.0ってVC++6.0のことだよな)
532 :
デフォルトの名無しさん :03/12/28 17:37
VisualC++6.0 でMFCアプリケーションを作る方法を勉強中です。 コンボボックスのドロップダウンリストで選択した文字列を取得して エディットボックスにすぐにそれを表示させてみたいのですが うまくいきません。 ダイアログボックスにコンボボックスとエディットボックスだけを 配置して、テストをしております。 CBN_SELCHANGE を使った関数で↓のようにしてみたのですが、 選択を変更するたびに、エディットボックスに表示してくれては いるのですが、毎度毎度、前回選択した(変更前)の文字列が表示されます。 どうしたら選択したものをすぐに調べることができるのか教えてください。 void CProp1::OnSelchangeCombo1() { CString ss; CEdit* cmb1=(CEdit*)GetDlgItem(IDC_COMBO1); CEdit* edt1=(CEdit*)GetDlgItem(IDC_EDIT1); cmb1->GetWindowText(ss); edt1->SetWindowText(ss); }
>>532 結構FAQかも。以下MSDNより
ON_CBN_SELCHANGE
このメッセージを処理するとき、コンボ ボックスのエディット コントロール内の
テキストを取得するには、GetLBText 関数または別の同種の関数を使います。
GetWindowText 関数は使えません。
CEdit* cmb1=(CEdit*)GetDlgItem(IDC_COMBO1); なぜにCEdit? CComboBoxでは? まずクラス・ウィザードでコントロールのメンバ変数を作成してやると良い CComboBox::GetCurSel()
535 :
デフォルトの名無しさん :03/12/29 09:02
532です。いろいろありがとうございました。 なんとかできました。GetCurSelで。がんばります。 void CProp1::OnSelchangeCombo1() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください CString ss; m_combo_1.GetLBText(m_combo_1.GetCurSel(),ss); m_edit_1.SetWindowText(ss); }
536 :
デフォルトの名無しさん :03/12/30 17:18
EnumWindowsでWHNDを取得することは出来ますが、CWndを取得 出来ません。EnumWindowsProcのヘルプは BOOL CALLBACK EnumWindowsProc( HWND hwnd,// 親ウィンドウのハンドル LPARAM lParam// アプリケーションによって定義された値 ); となっていますが初心者なのでHWNDからCWndに変換したいんですが どうすれば良いでしょうか?
ヒント:CWndのFから始まるメンバ関数
>>537 そういう意味のないじらしはマジでうざい。
CWnd::FromHandle←こんなので優越感に浸るっておまえはガキか。
539 :
デフォルトの名無しさん :03/12/30 17:34
>>537 findwindowでしょうか?ClassNameでウインドウを
識別してるのですが、この方法だとClassNameが同じで
欲しくないウインドウが上に来てると取得できないので
困ってしまいました。
ありがとうございました。2ちゃんいろいろ行くけど このスレで裏切られたことないな。
>>536 たまに質問者を騙る奴がいるから
質問するときはトリップをつけたほうがいいと思われ。
暇そうだもんな、来てる奴。
543 :
デフォルトの名無しさん :03/12/31 03:30
標準入力から文字列を読み込んで処理するプログラムがあります。 VisualStudioを使ってデバッグをしたいのですが どうやって標準入力に、用意したファイルを流したらいいのかわかりません。 (DOSやUNIX(シェル)のパイプ処理のような事をさせたいです) ご教授お願いします。 VC++.NETを使用しています。
すいません、質問です。 windowsプログラミングを勉強しようと思って、VisualC++ .net(単品)を 購入しようと思っているのですが、このパッケージにはMSDNLibraryのCDって 同梱されているのでしょうか? 定期的にCD送ってくるらしい、MSDNのライセンスはいらないのですが、 APIの仕様とか参照するのにMSDNLibraryはぜひとも欲しいと思っています。 いちおうMSのWEBサイトから見られるのも知っていますが、やはりHDDに インストールしてすばやくアクセスできるのが望ましいと思っています。 VisualC.netを買った方、MSDNLibraryのCD付いていたかどうか教えて いただけないでしょうか?
VisualC++6.0 の Viewクラスに OpenGLで描いた絵を 保存するためにbmpファイルを出力しています。 できることはできたんですが。 作成直後に bmp ファイルのプレビューをしようとしても 作成元のプログラムを終了するまで、表示できません。 たとえばWindowsXP に付属のPaint で見ようとしたら output.bmp へのアクセス中に共有違反が発生しました。 とエラーメッセージが出てしまいます。 fclose(fp)==0 になることは確認してるので、 ちゃんとファイルは閉じれてるっぽいのですが、 これだけだとファイルを見たり編集したりできないものですか。
補足ですが、 _fcloseall( ); だと、bmpファイルのプレビューできました(;_;) なんでだろう。
>>532 じゃ、どっかでオープンしたままなんだろ。
すべてのオープンからクローズのfpをしらべにょ。
番号間違えた。
二回開いてました。すみません。くだらないオチで。 以後気をつけます。ありがとうございました。。。。
553 :
デフォルトの名無しさん :04/01/01 21:48
VC++ からEXCEL のセルに字を入れてセーブするのは難しいですね。 何処かよいHPありますか..
555 :
デフォルトの名無しさん :04/01/01 22:57
レジストリクリーナを作りたいのですが、 参照されていないレジストリってどう判定するんでしょうか?
4GB以上のファイルにアクセスするときはどうすればいいですか? CStdioFileなどではファイルポインタがUINTだから4GBまでですよね
>>556 >ファイルポインタがUINTだから4GBまでですよね
SetFilePointerEx使え
>>557 >>558 CreateFile()の戻り値を使ってSetFilePointerEx()ですね。
どもです
560 :
デフォルトの名無しさん :04/01/02 13:15
VC++6.0でスタティックライブラリ(LIB)の作成について質問です。 ほかのLIBをリンクさせてLIBを作成したいのですが プロジェクトの設定のライブラリのタブにはインプットがありません。 このようなことはできるのでしょうか? お願いします。
リストビューコントロールで、カラムとアイテムとの間に 2ドット程の余白を入れる方法は無いでしょうか? Winのフォルダと同じような見た目を作りたいのですが。
厨質問ですいませんが、 visual c++ 6.0でコンパイルすると固まって、 ビルドの中止を選択しても何も起きないんですけど、 どうすればいいんでしょう
VisualC++6.0を人から借りて、最近いじってみているんですが、 よくわからないのでネットで調べてみたら、 「MFC AppWizard(exe)」と「Win32 Application」について書かれているページが多かったんですが、 どっちを覚えたほうがいいんでしょうか? また、それぞれの特徴は何なんでしょうか?
どっちも覚える羽目になる。 Win32APIをC++でラップしたのがMFC。
>>565 なんとなくわかったような気がします。
ありがとうございました。
VC6よりも2003の方がイイと思うが漏れだけかな? C++の標準準拠度も上がってることだし、喪前らも さっさと移行しれ。 と言ってみる。つか、いまさらコードの補完・エディタの機能が 貧弱なVC6とか使う気がしないのだが…。
おまえの感想なんかどーでもいい。
569 :
デフォルトの名無しさん :04/01/04 03:04
ちょっと質問なんですけど SDIプログラムでCviewを使い、ビュー上に表示された文字の上にマウスが来ると I型ポインタにしたり、文字をドラッグして選択できるようにするにはどうすればよいのでしょう? もちろんCEditViewなんかは使わなくて 分かる人教えてください
570 :
デフォルトの名無しさん :04/01/04 03:05
×文字をドラッグして ○ドラッグして文字を だった...すんません
>>569 俺も初心者なんでよくわかりませんが、
自分で文字の位置を計算して、反転表示させるのでは
ないですかね? ポインタ(Caret)の変更は、APIには
あるけどMFCにもあるんかな? ちょっとみつけられ
なかった。
さっきテストでDoc/ViewサポートのSDIプロジェクトを 作成して、 a.新しいCEditView派生クラスを定義 b.ウインドウを分割。aを割り当て。 してみたのですが、作成されたCEditViewが Docクラスと関連付けされていないので、 CSingleDocTemplate* pDocTemplate2; pDocTemplate2 = new CSingleDocTemplate( IDR_MAINFRAME2, RUNTIME_CLASS(CSampleEditDoc), RUNTIME_CLASS(CMainFrame), // メイン SDI フレーム ウィンドウ RUNTIME_CLASS(CSampleEditView)); AddDocTemplate(pDocTemplate2); こんな感じで関連付けしてみたのですが、予想に反して 起動時にDoc/Viewの組み合わせを選択する形になってしまった。 新しく派生させたViewクラスをドキュメントに関連付ける ときってどうするのでしょうか? ドキュメントクラスは 基本的に1つのアプリに1つだけですか?
574 :
デフォルトの名無しさん :04/01/04 16:00
>>571 レスありがとうございます
もうちょっと調べて見ます
>>573 使ってます。CreateStaticです。
CreateViewを実行した時点で関連付けはされているのでしょうか?
CView派生クラスと、CEditView派生クラスでテストしているのですが、
双方のクラスのGetDocument()↓はとりあえずNULLポインタではない
ポインタを指しているようです。(双方とも同じ数値だった)
CSampleDoc* pDoc = GetDocument();
576 :
デフォルトの名無しさん :04/01/04 16:38
C++を新しく勉強したいのだけど、お奨めの本ない? 当方のLVは、C++無知、FlashASを少々と言った感じです。
>>575 CSplitterWndにCEditView入れたこと無いけどたぶんOK
>>577 ありがとうございます。
この方向で色々試してみます。
>>568 C++の標準の準拠度が上がったというのは
結構大きいと思うがねぇ。
>>569 SetCursor();
>>580 準拠度が上がったことなどMSのサイト行けばすぐわかるので
おまえの情報などいりません。
つーか誰か質問したのか。準拠度について。.NET2003について。
おまえは単に.NET2003が手に入ってテンション上がっただけちゃうんかと。
テンション上がって書き込んでみたかっただけちゃうんかと。
>>581 >>564 でVC6を始めるって書いてあるだろ?
「友人から借りた」のだから仕事でもなかろうし。
>>567 は
>>564 宛のレスだとでも言いたいのかい?
>>567 で「喪前ら」と書いてるのに。
つか
>>564 は別にVC6にこだわってるわけじゃないだろ。借りたものがたまたま6だっただけであって。
「これからVC6を買う」と言ってるなら2003を薦めるのも納得できるが、
そんなのどこにも書いてないのにいきなり2003イイ!とか書いても「ハァ?今更何いってんの」って感じ。
584 :
デフォルトの名無しさん :04/01/04 23:23
CSplitterWnd と Doc/Viewについて引き続き質問です。 (a) 新しいサンプルプロジェクトを作成。 (AppWizardでCViewの派生クラス CSample3Viewを持つ) (b) 新たに CView派生クラスの CSample3BView を作成。 (c) CSplitterWnd の CreateStatic で上下に2分割をし、(a)(b)を割り当て。 ここまでは良かったのです。ちゃんとコンパイルできました。 (a)に関しては初めから、GetDocument()がオーバーライド されていて、即CDocumentクラスにアクセスできました。 問題は(b)の方で、ドキュメントクラスとの関連付けがされて いないのか、単にGetDocument()をオーラーライドしても 正しくコンパイルできません。
585 :
デフォルトの名無しさん :04/01/04 23:23
>>584 (続き)
MSDNのVIEWEXサンプルアプリを見るとCSplitterWndで
使用されるViewクラスはすべて
protected: // シリアライズ機能のみから作成します。
CTextView();
DECLARE_DYNCREATE(CTextView)
このようになっており、これはAppWizardではじめから
用意されるViewクラスと同じです。一方、独自に派生
させたViewクラスでは
protected:
CSample3BView(); // 動的生成に使用されるプロテクト コンストラクタ
DECLARE_DYNCREATE(CSample3BView)
となっています。GetDocument()のオーバーライドには
CArchive の m_pDocument が必要なのですが、その辺り
に影響しているのではと思っています。
どうしたら、独自派生のViewクラスからDocumentクラスに
アクセスできるのでしょうか?
>>585 AppWizardで作ったクラスと同じようにする。
>>583 >
>>567 は
>>564 宛のレスだとでも言いたいのかい?
多分
>>560 , 563-564の辺り。
>「ハァ?今更何いってんの」
お前は「今更」かも知れんが、VC6は初心者に薦められたもんじゃないだろ。
>>584 >正しくコンパイルできません。
エラー内容を書くべき。
恐らくMSDNのCCreateContextがヒントになると思われ。
>>586 挿入の「クラスの新規作成」で新しいCView派生クラスを作っている
んですが、AppWizardと同じようにするには何かコツがあるんでしょうか?
>>587 次のようにSample3Doc.h をインクルードすることで
コンパイルはできました。しかし、このGetDocument()
を使っても、どうもアクセスできません。
// CSample3BView ビュー
#include "Sample3Doc.h"
class CSample3BView : public CView
{
protected:
CSample3BView(); // 動的生成に使用されるプロテクト コンストラクタ
DECLARE_DYNCREATE(CSample3BView)
// アトリビュート
public:
CSample3Doc* GetDocument()
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSample3Doc)));
return (CSample3Doc*)m_pDocument;
}
>>589 (続き)
失敗するのは次のOnDraw関数のpDoc->m_stringです。
void CSample3BView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: この位置に描画用のコードを追加してください
numOnDraw++;
int tx = 10;
int ty = 10;
pDC->TextOut(tx,ty, "CSample3BViewの画面");
char strbuf[100];
wsprintf(strbuf, "OnDraw()の実行回数: %d", numOnDraw);
ty += pDC->GetTextExtent("A").cy + 5;
pDC->TextOut(tx,ty,strbuf, lstrlen(strbuf));
ty += pDC->GetTextExtent("A").cy + 5;
pDC->TextOut(tx,ty,pDoc->m_string);
}
Sample3\Sample3BView.cpp(54) : error C2039: 'm_string' : 'CDocument' のメンバではありません。
vc98\mfc\include\afxwin.h(4450) : 'CDocument' の宣言を確認してください。
CCreateContext の方はこれから調べてみます。
>>587 いや、だから誰もVC6を薦めて無いじゃん。
>>590 m_stringってメンバを追加したのは
CDocumentじゃないだろ。
つかデータメンバをpublicに置くのは関心できね。
>>592 お前は覚えたての吉野家のコピペを使いたかっただけちゃうんかと。
>>590 一応解決したみたいです。
void CSample3BView::OnDraw(CDC* pDC)
{
CSample3Doc* pDoc = GetDocument();
}
この部分、CDocument* ではなく、 派生クラスのCSample3Doc*で
受け取らなければならなかったです。デフォルトでは
CDocument* になってました。
いやはや、お騒がせしました。
みなさんありがとうございました。
>>593 まさにそのとおりです。
どうもでした。
C++でクラス・構造体どうしを相互に参照させるにはどうすればいいのでしょうか?
またまた質問なんですけど CCSrollViewを基本クラスとしたSDIプログラムで 現在ブラウザのようなプログラムを作成しているのですが、 ビュー上に表示された文字列を反転(選択時みたいに)するにはどうすればよいのでしょう? (コピー処理を行いたい) やっぱりCDCあたりを利用するのでしょうか?
class Test1 { Test2 test2; public: Test1(Test2* test2) { this->test2=test2; } } class Test2 { Test1 test1; public: Test1(Test1* test1) { this->test1=test1; } } ・・・ error C2501: 'Test2' : 識別名を宣言するのに、型が指定されていません。 (その他エラーいっぱい) という状況です
あ、解決しました
>>599 自己解決したなら「解決しました」じゃなくて、どう間違えていたか書けよ。
>>600 失礼、クラスのプロトタイプ宣言をしたら直りました
class Test2;
class Test1
{
・・・
602 :
デフォルトの名無しさん :04/01/05 11:14
自分のライブラリをnamespaceでかこってるとソースが全部インデントから始まってうっとうしい。 class hoge { public: hoge(); }; が namespace hoge { class hoge { public: hoge(); }; } という感じにインデントが深くなって画面が狭いと見にくいです。 namespaceだけインデントしなくしたいんですがVC.NETでできますか? あと、みなさん的にnamespaceだけインデントしないのどう思います?
Visual C++6.0でテキストファイルを連結してひとつのテキストファイルに まとめるという簡単なコンソールアプリのプログラムを書き、 cat A.txt B.txt C.txt とコマンドから入力すれば連結されたテキストファイルが出力されました。 次にこれらのテキストファイルをエクスプローラからD&Dで 実行ファイルに渡してみたのですが、うまく引き渡せていないようです。 大量のテキストファイルを処理するときに不便なのでなんとかD&Dで できるようにしたいのですがどのようにすれば実現可能でしょうか? よろしくお願いいたします。
>>603 D&Dで複数のファイル名を渡すということですか?
それは難しいんじゃないですか?
cat A.txt
だけなら、D&Dでできるでしょうが。
>>604 そうです。複数のテキストファイルをD&Dで渡すということです。
難しいことなのですか○| ̄|_
コマンドラインからcat A.txt B.txt・・・・・・
これは使いにくそうなプログラムを作ってしまった><
レスありがとうございました。
607 :
デフォルトの名無しさん :04/01/05 14:45
c++のソフトって初めから入ってますか?
>>603 こーゆーことかい?
main( int argc, char *argv[ ], char *envp[ ] )
{
for( int n = 0;n < argc;n++ )
{
printf( "%s\r\n", argv[ n ] );
}
}
610 :
デフォルトの名無しさん :04/01/05 16:47
VCで関数を左のワークスペースウインドウでメンバ関数やメンバ変数をダブルクリック するとその内容が右のウインドウに現れますよね。 ところが引数をenumの型の変数にするとどうしてもインプリメンテーションが見つかりませんという 表示が現れ、内容の表示ができません。enumの型はヘッダファイルで宣言しています。 また、CSampleProjectView::というような記述を加えてもできません。 どうすればいいのでしょうか。
611 :
CEdit入力時のマウスカーソルについて :04/01/05 17:26
VC6.0SP5を使用しています。 ダイアログベースのアプリケーションを作成し、CEditを貼り付けました。 これを起動して、CEditに半角入力しますと、 マウスカーソルが消えてしまい、マウスを動かさないと表示されません。 入力中もマウスカーソルを消えないようにしたいのですが、 そもそもこれは仕様なのか、環境または設定の問題か、 どのようにすれば解決するか、 ご存知の方いましたら宜しくお願いします。
>>608 なるほどD&Dでもきちんと複数ファイル分の引数が渡されているようですね。
上にパスがくっついているのがいけないのかな・・・
とにかくできそうなのでもうちょっとがんばってみます。
ありがとうです。
613 :
デフォルトの名無しさん :04/01/05 21:46
>>560 です。
どなたか知恵をお貸し頂けないでしょうか?
●やりたいこと。
VC++ 6.0 のプロジェクトにて「スタティックリンクライブラリ」を選択。
A.lib を リンクして B.lib を作成したい。
●悩んでいるところ
B.lib のプロジェクトの設定で
A.lib をリンクさせるための手段が分からない。
重ね重ね、よろしくお願いします。
>>611 ShowCursor()がヒントになると思われ。
>>613 A.libのソースを貰え。
615 :
デフォルトの名無しさん :04/01/05 22:08
>>613 です。
>>614 情報ありがとうございます。
リンクしようとしているライブラリは商用です。
ソースは公開されていません。
このようなリンク方式は一般的ではないのでしょうか?
>>613 リンカじゃなくてライブラリアンで結合。昔やったけどどうやったか忘れた。
ヘルプにLIB.EXEかなんかの説明載ってない?
617 :
DBGファイル :04/01/05 22:50
質問なのですが、VC++.NET2003でデバッグをしたときに画面の下(出力ウィンドウ)に 表示される「...必要なDBGファイルが見つからないか、開けません。」というのは、 エラーなのでしょうか?(OSはWindows2000を使っています。)
618 :
デフォルトの名無しさん :04/01/05 22:55
>>613 です。
情報ありがとうございます。
ヘルプを頼りに結果をだせるように頑張ります。
ところで階層的にリンクするというのは一般的ではないのでしょうか?
とあるライブラリのLIBをリンクして
フレームワーク(LIB)を作ろうとしています。
各プログラムはそのフレームワーク利用して開発を進めたい方針です。
LIBにする必要はない?
フレームワークのヘッダとCPPを共有ディレクトリへ置いて
各プログラムで各自コンパイルしてもらうほうがいいのでしょうか?
ただ、CPPUnitなどでテストしたい場合などは
テスト対象をLibにする記述があったような。
ちぐはぐしていてすみません。
下のように書いてみたのですがコンソールからの入力 ではきちんと動作するのにD&Dでファイルを渡すと動きません。 デバッグしてみるとD&Dの場合にもファイルパスなどは引数として 渡されているようなのですが・・・putcなども使ってみましたがだめでした。 お助けくださいpq #include <stdio.h> #include <stdlib.h> void main(int argc,char *argv[]){ FILE *fp,*outfile; int c; outfile=freopen("out.txt","w",stdout); if(argc==1){ printf("Warning:Please input files\n"); exit(1); } else{ while(--argc>0){ if((fp=fopen(*++argv,"r"))==NULL){ printf("Warning:File open error\n"); exit(1); } else{ while((c=getc(fp))!=EOF){ printf("%c",c); } fclose(fp); } } } }
/* 略 */ void main(int argc,char *argv[]){ for(int i=0;i<argc;i++) puts(argv[i]); }
621 :
デフォルトの名無しさん :04/01/06 01:37
ダイアログベースで簡単なプログラムを作りたいのですが その中のいくつかの関数は int ,CString 型の変換ややり取りしかしません それをWin32 Console Applicationでテストしながら作りたいのですが CStringを使うときに必要なヘッダーを教えてください。 MSDNなどを見たり検索したりしたのですが自分の力では見つけられなかったのでお願いします
622 :
デフォルトの名無しさん :04/01/06 01:38
↑付けたし C++相談室 part26 から誘導されてきました。
MSDNのCStringのページの下の方見れ。
>>617 エラーじゃないよ。
文字通り、デバッグシンボルが見つからない時に表示されないだけ。
デバッグシンボルをインストールしておくとコールスタックを見る時に便利だから
入れておいた方がいいかもね。
ありました。それにしたがって #include"cstringt.h" #include"atlstr.h " と書いてビルドしたら fatal error C1083: インクルード ファイルがオープンできません。 'cstringt.h': No such file or directory cl.exe の実行エラー と出てしまいました
Dialogを出して、Dialog上のボタン押したら 別ウインドウに反映するとかが解らない グローバル使うべき?
627 :
デフォルトの名無しさん :04/01/06 02:23
test
>>625 ヘッダだけincludeすれば使えるというレベルじゃないので、素直にMFCを使う
コンソールアプリプロジェクトで作ればよいと思う。
//CStringに限っては、afx.hをinclude+プロジェクトの一般設定でMFCを使う
ように設定すれば使えるっぽいんだけど
>>626 グローバルは使わなくてもできる悪寒。
っていうか、具体的にどんなことがしたいの?
ダイアログに親ウィンドウのハンドルを持たせて SendMessageすれ。
>>620 レスありがとうございました。
C言語のスレに書こうと思ったのですが、D&Dなので
Windows関係の話になるかもと思いこちらに書き込んでしまいました。
このまま質問続けていいかわかりませんが、一応書いておきます。
複数のテキストの内容を結合したファイルを出力したいのです。
>>619 のプログラムで
outfile=freopen("out.txt","w",stdout);
の行をコメントアウトすると画面出力に切り替わるのですが
そちらのほうだとD&Dでもうまく結合されて出力されます。
コメントアウトをはずしてファイル出力にすると、なにも出力されなくなってしまいます。
OSはXPを使っていますがもしかしたらこれが悪いのかな・・・
何回も質問すみませんです。スレ違いだと思われましたら放置してくださいtt
>>631 OSを疑う前に問題を切り分けろ。
D&Dの問題なのか、freopen()の問題なのか。
freopen()を使って巧く動くようになってからD&Dで悩めばよい。
#ふつーfreopen()なんて使わんがな。
633 :
DBGファイル :04/01/06 08:56
>>624 ありがとうございました。エラーかと思っていたので安心しました。
早速、デバッグシンボルをインストールしようと思うのですが、これはVC++付属の
CD-ROMからインストールできるのでしょうか?(続けて質問して申し訳ございません。)
>>632 レスありがとうございます。
freopenは最初から使っていたわけではないのですが
fopenで開いてputcで出力しようとしていてできなかったので
あれこれ試していて使いました。
619のプログラムに
A.txt(ファイルの中身 aaa)
B.txt(ファイルの中身 bbb)
C.txt(ファイルの中身 ccc)
というファイルを
・コマンドプロンプトから
cat A.txt B.txt C.txt
と渡した場合→ out.txt(ファイルの中身 aaabbbccc)が出力されます。
・D&Dでファイルを渡した場合→out.txtが出力されないです。
おかしいなと思い先ほどもいったように
outfile=freopen("out.txt","w",stdout);
の行をコメントアウトし、画面出力に切り替えて
D&Dでファイルを渡すときちんと画面には
aaabbbccc
と出力されているのです。
これはfopenでファイルを開いてputcした時も同じようになっていたので
D&Dの問題なのではないかと思っています。
D&Dの時にはなにかファイル関係で気をつけなくてはいけないことが
あるのでしょうか。○| ̄|_
>>634 カレントディレクトリにできてるはず。D&Dするとカレントは実行ファイルとは違うこともある。
あと、argc,argvのインクリメント・デクリメントは感心しない
637 :
DBGファイル :04/01/06 12:36
情報ありがとうございます。 接続環境がADSLなのでシンボルサーバーを使ってみます。
>>635 C:\Documents and Settings\ユーザー名
のところにファイルができておりました。
どうもありがとうございました。
実行ファイルがあるフォルダに吐かせるように改良してみます。
>>argc,argvのインクリメント・デクリメント
C言語の某バイブル本に載っていたので真似してしまいました。
指摘ありがとうございます。
640 :
デフォルトの名無しさん :04/01/07 01:43
実行エラーでaccess viorationとなってしまいます。 メモリ関連のエラーだというのはわかったのですが どういう対処をすればいいのでしょうか。 デバッグを毎回するたびに1行1行読み込ませるとうまくいく 場合もあります。
>>640 デバッグモードで実行すれば
assertが出るんでない?
ちみたち、VC++で何つくってるのか教えなさい
643 :
デフォルトの名無しさん :04/01/07 02:04
assertが出てきても何をしていいのかよくわからなくて。 すいません。教えてくれるとうれしいです。
>>643 関数の呼び出し履歴を見ればどこでassertが起きてるかわかるだろ?
645 :
デフォルトの名無しさん :04/01/07 04:30
Visual C++ で、.cファイルをC++としてコンパイルしたいのですが、 どこで設定すればいいのでしょうか?
>>635 > argc,argvのインクリメント・デクリメントは感心しない
なんで?
Pentium Proへの最適化のオプションて どれぐらい意味があるの? おしえて、お兄ちゃん。
648 :
デフォルトの名無しさん :04/01/07 13:26
>>644 呼び出し履歴はどうやってみるのでしょうか。
何度もすいません。
649 :
デフォルトの名無しさん :04/01/07 13:44
ボタンを作成し、そのボタンに対応した関数も 作ったとき、 そのボタンを全て消したいときはどうすればいいのでしょうか。
651 :
デフォルトの名無しさん :04/01/07 16:24
データをファイルに書き込むとき、作った構造体そのものを 書き込むことはできるのでしょうか。 例えば、 struct kouzou{ int a; int b; }; という構造体を作ったとき、この構造体をそのままファイルに書き込むことは できるのでしょうか。なるべくこの構造体のままで書き込みたいです。 また、enum型はファイルに書き込むことはできるのでしょうか。
fwrite これ以上はC言語のスレで質問したほうがよい
>>652 ありがとうございました。調べてわからなかったら別スレで
質問させていただきます。
VC++6.0 デバッグでF10で進めていった場合に 実行ファイルの最後で(まれに途中でも)ソースファイルの検索ダイアログってのが出ます。 出さないようにできますか?
655 :
デフォルトの名無しさん :04/01/07 20:44
ここに書くのが適切ではないかもしれませんが、 INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT ) という風に第2引数以下を省略しても動作に問題はないでしょうか?
ラジオボタンの表示と、初期化時に先頭のラジオボタンに チェック入れる所まではできたが、マウスでクリックしても ウンともスンともいわなくて困った。 流れ的にはボタンクリックのイベントが発生したらそこへ飛ぶ、というタイプにしてるんだけど この部分にはミスはないと思うのでなにか他の部分がダメなのかも。 BEGIN_MESSAGE_MAP(SelectTexturePtn, CDialog) ON_BN_CLICKED( IDC_TEXTURE_PTN00,OnBnClickedBtnradio0 ) ON_BN_CLICKED( IDC_TEXTURE_PTN01,OnBnClickedBtnradio1 ) ON_BN_CLICKED( IDC_TEXTURE_PTN02,OnBnClickedBtnradio2 ) END_MESSAGE_MAP() BOOL SelectTexturePtn::OnInitDialog() { CheckRadioButton( IDC_TEXTURE_PTN00, IDC_TEXTURE_PTN03, IDC_TEXTURE_PTN00 ); return TRUE; } void SelectTexturePtn::OnBnClickedBtnradio0() { CheckRadioButton( IDC_TEXTURE_PTN00, IDC_TEXTURE_PTN03, IDC_TEXTURE_PTN00 ); } void SelectTexturePtn::OnBnClickedBtnradio1() { CheckRadioButton( IDC_TEXTURE_PTN00, IDC_TEXTURE_PTN03, IDC_TEXTURE_PTN01 ); } void SelectTexturePtn::OnBnClickedBtnradio2() { CheckRadioButton( IDC_TEXTURE_PTN00, IDC_TEXTURE_PTN03, IDC_TEXTURE_PTN02 ); }
658 :
デフォルトの名無しさん :04/01/08 01:30
MFCを使わずにリッチテキストにビットマップ等のピクチャー類を 貼り付ける方法はありますか?VC++6を使っています。
>>646 グローバル変数を軽軽しく扱うと分かりづらいバグの原因になる。
変なクセは抜いておいた方が後後のため。
第一、argc,argvの意味合いを考えれば、変更するのはおかしい。
自動変数にコピーするくらいの考え方は身に付けておいて欲しい。
661 :
デフォルトの名無しさん :04/01/08 12:05
boost::filesystemのサンプルプログラムをVC++.NETで試しています。 プロジェクトにboost\libs\filesystem\src\*.cppを含めてコンパイルするとうまくいくのですが 含めないと「error LNK2019: 未解決の外部シンボル」が出てしまいます。 ライブラリへのパスが通ってないのが原因かと思い、設定してみましたが変化なしです。 プロジェクト毎にいちいちboostのソースファイルを含めるなんてめんどうなことをしないのが 正しいと思うのですが、何の設定が足りないのでしょうか? 基礎がわかってないと思うので猿でもわかるような解説きぼん。
662 :
デフォルトの名無しさん :04/01/08 12:07
標準関数の定義を見たいのですが、VC++のフォルダの中にはありませんでした どこにあるのでしょうか?
>>662 目的の関数を選択反転 → 右クリック「定義へ移動」 @VC++ 2003
665 :
デフォルトの名無しさん :04/01/08 17:26
リッチエディットを縦書き表示にしたいのですが、 SendMessage(hWnd, EM_SETOPTIONS, (WPARAM)ECOOP_OR, (LPARAM)ECO_VERTICAL); としても何も変化がありません。 どうすれば良いでしょうか?
Cでキー入力をもらうのってどうやったらいいでしょうか? scanfみたいにエンター押すまでじゃなくて、 何かキーが押された瞬間に判定をしたいので
>>667 ありがとうございます。
変数名=getch();
みたいな感じでしょうか。
あと関数群はどれですか?
>>668 conio.h
>変数名=getch();
これでOKです。
671 :
デフォルトの名無しさん :04/01/08 18:12
#pragma warning(disable : 4786) みたいなことをプロジェクトの設定か何かでできますか? つまり、プログラムソース上でなくてプロジェクト単位で指定したいのです。 よろしくお願いします。
672 :
デフォルトの名無しさん :04/01/08 18:12
>>671 プロジェクトで必ずインクルードするファイルに指定しとけば?
VC.NETなら指定するところがあるけどな。
Windowsムービーメーカーでは動画キャプチャできないカメラから、 イメージをキャプチャしてそれをリアルタイムに動画で書き出すことは可能ですか? うまく説明できないので、 「カメラから、現在映っている画像を取得する。 そのデータを、動画データに変換」 「」を繰り返して、最終的に何分かの動画になる。 できれば、フレーム間隔は一定。 このようなことはVCでできますか?
>>673 レスありがとうごさいます。
必ずというのは自動的にインクルードする(cppにincludeを書かなくても)という意味でしょうか?
VC6を使っているのですが[C/C++]-[プリコンパイル済みヘッダー]の項目には
自動的に.hをインクルードするような項目はありませんでした。
include文を強制させるのはありましたが。
UNIX系で開発したプログラムをVCでコンパイルしているのですが、警告が多いので
どうでもいい警告は消そうと思ったのです。
.cppファイルが多いのでMFCでのstdafx.hのようにする方法はとりあえずあきらめて、
ほかに楽な方法があればと思い投稿しました。
676 :
デフォルトの名無しさん :04/01/08 20:29
CFILE型の変数を引数とした関数を作ることはできないのでしょうか。 CFILE cfile; Function{ Function2(&cfile); } Function2(CFILE *cfile){ *cfile.Write(......); } としてもコンパイルがうまくいきません。
677 :
デフォルトの名無しさん :04/01/08 20:45
>>676 Function {
};
の最後には ; がいると思うが、そこは大丈夫?
どういうコンパイラエラーがでるの?
>>675 それじゃしゃーないな。
perlかなんかのスクリプト組んでですべてのcppファイルにプラグマ埋め込めば?
680 :
デフォルトの名無しさん :04/01/08 21:21
DirectXのプログラムをしてみようとはじめたばっかりなんですが、 error C2660: 'ID3DXSprite::Begin' : 関数に 0 個の引数を指定できません。 error C2660: 'ID3DXSprite::Draw' : 関数に 7 個の引数を指定できません。 というエラーで行き詰ってます。 DirectXの質問というよりなんかもっと根本的な気がしてこちらに質問いたしました。 SDKのヘルプでは引数の数はあっているんですが、なんかの関数と混同して このエラーが出るというとこまでこぎつけました。 が、どう対処していいのかわかりません・・。 どなたか、お教え願いませんでしょうか。 環境 VS.NET (WinXP Pro) インクルード #include <windows.h> #include <tchar.h> #include <d3dx9.h> #include <dxerr9.h> 宣言 LPD3DXSPRITE g_pD3DXSprite = NULL; 使用部 g_pD3DXSprite->Begin(); g_pD3DXSprite->Draw(g_pD3DTexture, NULL, NULL, NULL, 0.0f, NULL, D3DCOLOR_ARGB(alpha>255?511-alpha:alpha,255,255,255));
>>679 Function は関数か?
まあ、参考にならぬなら無視してくれ。
>>676 >*cfile.Write(......);
cfile->Write(......);
だろ
>Function は関数か?
ワラタ
std::vectorを使いたいのですが、使用後の領域の削除(後始末)は自動的に行われるのですか? 何か自分でやらなければいけないのでしょうか?
>>676 宣言で参照引数なのに、実装でポインタにしてるのはなぜ?
(*cfile).Write(......); またはcfile->Write(......);
686 :
デフォルトの名無しさん :04/01/09 18:55
作成したツールバーのボタンを無効にしたり 有効にしたりする操作をインタフェース上で やるにはどうすればいいのでしょうか?
688 :
デフォルトの名無しさん :04/01/09 19:45
>>687 はい。そうです。できないんでしょうか。
>>688 から何か若さのようなものを感じるヤシの数→(1)
>>688 ON_UPDATE_COMMAND_UI とかのことかな
クラスウィザードでイベントハンドラ追加して
void CxxxView::OnUpdateXXX(CCmdUI *pCmdUI){
pCmdUI->Enable(無効とか有効とかの条件) ;
}
こんな感じになるんじゃねーの
「インターフェイス上でやるには」という表現がどうもしっくりこない。
ありがとうございます。 インターフェース上というのは、例えば、あるボタンを押したら、 ツールボタンの1つが使えるようになるというような感じです。
693 :
デフォルトの名無しさん :04/01/10 02:07
時報つき時計を作っています。 時報といってもピッ、ピッ、ピッ、ポーン!という2音のものです。 最初ビープでやっていたんですが機種によってはヘッドホン端子に音が出ません。 そこでWaveform でやってみたんですが、音を鳴らすたびにデバイスを切断する? のかへんな雑音が入り、大変聞き苦しいです。 こういう場合どんな感じでやるのがよいのでしょうか?
>>693 ・ピ・ピ・ポンの・の部分で雑音がなるの?
BEEP音はサウンドカード使わずに音を鳴らすからね。
695 :
デフォルトの名無しさん :04/01/10 03:37
char *lpszBuf = "ここを印刷します。"; ってどういう意味なんですか? 印刷するプログラムをつくらなきゃいけなくなって、 自分の買った本に書いてあったんですけど、 エディットボックスの中を印刷したくて、 char *lpszBuf = m_a; にするとエラーが出てしまいます、 エラーの内容は:Class CStringからcharに変換することはできません。 とでます。 本の名前は猫でも分かるwindowsプログラミングです。 よろしくお願いします。
>>693 とりあえずBOSEのスピーカーを使ってみれば?
698 :
デフォルトの名無しさん :04/01/10 05:42
#include<iostream> #define HOGE( method ) gObj->method(); class CBase { public: void Init(){} }; intmain() { CBase gObj; HOGE( Init ); return 0; } さっきから上のソースの部分が時々コンパイルが通ったり 通らなかったりするのですが、 これは何かマズイソースなんでしょうか? win VC++6
699 :
デフォルトの名無しさん :04/01/10 05:51
即効自己解決しました。 前:#define HOGE( method ) gObj->method(); 後:#define HOGE( method ) gObj.method(); アロー演算子でやっていました。どうもすいませんでした。 しかし何回かコンパイルが通った気が・・・ むーん
>>694 そうなんです。
やっぱり使い方が悪いのかな。
>>700 変な値やWin95で使っているとか?
あとは、接触が悪いとか・・・・・
702 :
デフォルトの名無しさん :04/01/11 02:42
おながいします。 exeとそれが使っているdllの2つのプロジェクトが入ったワークスペース があるときにexeをアクティブプロジェクトにしてデバッグ実行 したのですが、dll中のコードをステップ実行できません。 どうすればいいのでしょうか?
>>702 dllに関してもpdbファイルが無いとだめだったはず。
>>703 夜分どうもありがとう(TT)
やってみますぅ。。。
705 :
デフォルトの名無しさん :04/01/11 15:57
WINxpにVB6.0をインストールしようとすると 問題が発生したため、vs60wiz.exe を終了します。 ご不便をおかけして申し訳ありません。と出てインストールできません。 どなたか解決法がわかる人いませんでしょうか?5.0を前にインストールすることは できたのですが6.0だけはなぜかできません。わかる方いましたらよろしくお願いします。 このエラー報告には以下のファイルが含まれていますとでてました。 C\LOCALS~1\Temp\WER9.tmp.dir00\appcompat.txt
FAQで今調べていますが今のところわからないです。
>>707 さん割れたからというのは?
ここで聞くのが妥当だと思って質問させていただきます。 環境はVisual C++ 6.0 SP5, WindowsXP SP1です。 ビットマップを表示するアプリを作っています。 ウィンドウ上のクリックした場所にビットマップを表示するのですが CDC::BitBltのラスタオペレーションでSRCPAINTを 選択するとビットマップ表示されません。 他のラスタオペレーションでは表示されます。 原因として考えられることだけでも教えてくれるとありがたいです。
VisualC++6.0からNETのヘルプが起動するようにする方法はありませんか?
NET→.NET のことね。
>>709 SRCPAINTは転送元と転送先のORだろ。
転送先がオール1(白)だと何も変化しない。
一時期.NETインストールして
ヘルプドキュメントだけ使ってたなぁ。
>>709 普通SRCCOPYを使うな。うん。
>>712 , 713
転送先とORを取ってるんですね。
そりゃ、表示されないはずです。
勉強不足ですいませんでした。
どうも有り難う御座いました。
715 :
デフォルトの名無しさん :04/01/12 21:53
例外でポインタを投げたときのアドレス解放の仕方を教えてください 「//*1」の行をコメントアウトしないと、 実行したときエラーになってしまうのですが、なぜだかわかりません afx.hをinclude+プロジェクトの一般設定で MFCを使うように設定しCStringを使えるようにしました #include<iostream> #include"afx.h" using namespace std; void myfunc(int flag){ if(flag == 0){ char *ErrorMessage = new char[128]; ErrorMessage = "errorです"; throw ErrorMessage; }else if(flag == 1 ){ CString ErrorMessage = "errorです"; throw ErrorMessage; }else if(flag == 2 ){ CString* ErrorMessage = new CString(); *ErrorMessage = "errorです"; throw ErrorMessage; } }
716 :
デフォルトの名無しさん :04/01/12 21:54
int main(){ for(int i=0; i<3; i++){ try{ myfunc(i); }catch(char * chErrorMessage){ cout<< "char*型でエラーメッセージが送られてきた" <<endl; //*1delete [] chErrorMessage; }catch(CString strErrorMessage){ cout << "CStringでエラーメッセージが送られてきた" << endl; }catch(CString* strErrorMessage){ cout << "CStringのポインタでエラーメッセージが送られてきた" << endl; delete strErrorMessage; } }
717 :
デフォルトの名無しさん :04/01/12 22:15
>>715 char *ErrorMessage = new char[128];
ErrorMessage = "errorです";
この2行目が問題。2行目は
"errorです"という定数文字列へのポインタ
を代入する意味になってます。つまり
1行目と2行目でErrorMessageの指し示す
アドレスの値が変わっている。
catch側で定数文字列を解放しようとしたた
めに実行時のエラーになってると思います。
new char[128]で確保したメモリに
"errorです"という文字列をコピーするには
strcpy(ErrorMessage, "errorです");
とすることが必要です。
>>717 うまくいきました
>>"errorです"という定数文字列へのポインタ
>>を代入する意味になってます。
ということはstrcpyを用いた解決方法以外に
char *ErrorMessage = new char[128];
をなくし
char *ErrorMessage = "errorです";
とすると
catchの中で開放がいらないということですか?
719 :
デフォルトの名無しさん :04/01/12 22:49
Integer division by zero を catch(exception_type exception_name) で拾いたい場合、 exception_type は何を指定すればよいのでしょうか? catch(...) では拾えますが、 それだと Integer division by zero だけとは限らないので・・・
>>718 そういうことですね。
"文字列";
は、関数の中でも外でも、どこにあろうと
メモリ確保は静的に、つまりプログラムの
起動から終了まで、メモリのどこかに
固定的に確保されていて、
char *ptr;
char ch;
int i;
などは、グローバル領域に宣言&確保される
場合は上記文字列と同様だと思いますが、
関数内で宣言&確保された場合は関数が
呼び出されるたびにメモリが確保されて
関数のスコープ { } を抜け出た時点で
自動的に確保したメモリを解放します。
これで正しかったと思う。
721 :
デフォルトの名無しさん :04/01/12 23:01
static_castして==で判定してそれ以外ならまた投げるとか?
722 :
715 718 :04/01/12 23:03
>>720 わかりました
どうもありがとうございます
723 :
デフォルトの名無しさん :04/01/12 23:52
6.0で以前作ったクラスを再利用する時ってその親クラスの ヘッダファイルも全てプロジェクトに入れる以外に、 エディタのインテリセンスを利用する事はできんの? Win32やMFCの関数なんかだと、何もしなくても インテリセンス使えるのに・・・(´・ω・`) ツール→オプション→ディレクトリの部分をいじって #include <myclass.h>みたいのはできるようになったけど・・・
Windowsフォームを追加して、フォームの表示をしたいのですが C#だと Form2 f = new Form2(); f.ShowDialog(this); こんな感じですが VC++.NETだとどうなるんでしょうか?
[][][][][][][][][][][][][][][][][][][][ [][][][][]] [][][][][][][][][][][] []][][ ][][][][][][][][][][][[][][][][][][][][][][][][][] []はいくつあるでしょうか?
726 :
デフォルトの名無しさん :04/01/13 00:38
std::vector<char[256]> vec; 〜中略〜 for (i = 0; i<=10; i++ ){ fscanf(fp, "%s", itizi); vec.push_back(itizi); } なのですがエラーがでてしまいます。素直にstring等を使ったほうがいいのでしょうか?
>>727 どういうエラーが出るのか
書いてくれないと。
>>728 c:\program files\microsoft visual studio\vc98\include\xutility(39) : error C2440: '=' : 'const char [256]' から 'char [256]' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換が可能なコンテキストはありません。
c:\program files\microsoft visual studio\vc98\include\vector(170) : コンパイルされたクラスのテンプレートのインスタンス化 'void __cdecl std::fill(char (*)[256],char (*)[256],const char (&)[256])' の参照を確認してください
c:\program files\microsoft visual studio\vc98\include\xutility(25) : error C2106: '=' : 左のオペランドが、左辺値になっていません。
c:\program files\microsoft visual studio\vc98\include\vector(174) : コンパイルされたクラスのテンプレートのインスタンス化 'char (*__cdecl std::copy_backward(char (*)[256],char (*)[256],char (*)[256]))[256]' の参照を確認してください
c:\program files\microsoft visual studio\vc98\include\xmemory(34) : error C2538: new : 配列に対し初期化子が与えられています。
c:\program files\microsoft visual studio\vc98\include\xmemory(66) : コンパイルされたクラスのテンプレートのインスタンス化 'void __cdecl std::_Construct(char (*)[256],const char (&)[256])' の参照を確認してください
こんな感じです・・・
730 :
デフォルトの名無しさん :04/01/13 04:21
>>727 該当ソースを全部見ないとなんとも言えないが、const char[256]とchar[256]は
castしないと代入できないからどちらかに統一してみてはどうか。
尤も、それ以前にstd::stringでできるのならそのほうがよいと思うのだが。
親以下のコントロールにファイルをドロップする処理を クラスを使わずに実現したいのですが 何か方法はありませんか。
今までBCBやってて、VCはどんなもんかとインストしてみたらマンドクセー コンポーネントとかプロパティとかねーし。コードをガリガリ書くの大変だね。
ガリガリ書かねーよ。 みんな、アップウィザードとコードウィザードとコピペだけだ。
本についての質問です。 これからVCをはじめます。 しかし、参考書がありません。 最終的には、音声とか画像を扱いたいので、 入門書にもなり、メディアをカバーしたという都合の良い本はありますか? 一応、Javaやってきてるんで、プログラミング自体は初心者ではないです。
736 :
デフォルトの名無しさん :04/01/13 18:40
Digital Mars C++の コンパイラをダウンローをしたけど 使えません。どうやって使うんですか
キーボードからの入力を捕らえたいです。 普通に窓の WndProc で WM_KEYDOWN を拾うのはわかりましたが、 ウインドウがアクティブでない状態でもキー入力を感知したいです。 どのような手法をとればいいでしょうか?
739 :
デフォルトの名無しさん :04/01/13 19:02
740 :
デフォルトの名無しさん :04/01/13 19:19
VC++.NETなんですけど .NETアプリでプロジェクトを作成たんですけど LoadLibrary()関数を使うために #include<Windows.h>をインクルードしたら this->Icon = (__try_cast<System::Drawing::Icon * >(resources->GetObject(S"$this.Icon"))); ↑この行がエラーを吐くようになりました。 \Form1.h(158) : error C2039: 'GetObjectA' : 'System::Resources::ResourceManager' のメンバではありません。 こんなエラーです。 #include<windows.h>をコメントアウトすると、直ります。 どうしてでしょうか?
>>731 結局stringを使いました。これで一応解決・・・です
解決しました。 海外サイト調べたら #ifdef GetObject #undef GetObject #endif を追加するといけるとの事だったのでやってみたら 出来ました。
どなかたか
>>724 分かりませんか?
サイト調べたりMSDN調べても、Windowsフォームの追加方法しか乗ってなくて
肝心の表示方法が載ってません。
助けてください(涙
イテレータをintに変換したいんですがどうすればいいでしょうか
自己解決です。 Form *f = new Form2(); f->ShowDialog(this); でいけました。
746 :
デフォルトの名無しさん :04/01/13 23:12
DOC/Viewアーキテクチャのプロジェクトで、 左側のクラスのツリーで、viewクラスにあるメニューコマンドの ハンドラを削除したら、viewクラス全体がワークスペースから 削除されてしまいました。 これを追加するにはどうしたら良いんでしょう? 単純にファイルタブからファイルを追加してもすでに プロジェクトに追加されていると出てしまいます。
747 :
デフォルトの名無しさん :04/01/14 00:01
VS6の場合なら一度終了させてから、 ******.clw というファイルを削除して再度VS6を起動し さらにClassWizardを起動すれば戻る可能性あり。
***View.h を再保存しても直るよ
>>747-748 どもども。お蔭様で直りました。
再度やり直しかと思っていたので助かりました。
短いコードなんですが、3日ほど四苦八苦して
作ったものなので。(笑
MFCにはシフトJISとEUCの相互変換する関数って ないんすかねぇ。自分で実装しなくちゃいかん? マンドクセ。
プログラムが書いてあって、ここを埋めてくださいとかいうテスト 全然分からない。
753 :
デフォルトの名無しさん :04/01/14 15:42
CD Manipulator みたいにメインウインドウの外側に並置 されるウインドウが作りたくて、とりあえず、 CWnd派生クラスを作り、CView派生クラスのOnCreateで CWndInfo m_wndINFO; CString strWndClassName = AfxRegisterWndClass(NULL); m_wndINFO.CreateEx(WS_EX_LEFT, strWndClassName, "インフォメーションウインドウ", WS_VISIBLE, CRect(0,0,0,0), NULL, IDW_EDIT_INFOWINDOW); このようにして作成しようとしたんですが、CreateExが 失敗を示す 0 を返すんです。何が悪いんでしょう? CD Manipulator をspy++でみると、並置ウインドウはやっぱり 子ウインドウではない形で存在してるんで、親ウインドウは NULLにしなくちゃいけないと思うのですが。
>>753 CStringを渡しているところが怪しい気がする。
そこはLPCTSTRじゃないの?
>>754 CStringはLPCTSTRとそのまま置き換えられる
const修飾子付き→読み出し用
>>753 子ウィンドウでもないのにIDもないだろ。
>>754 CStringはoperator LPCTSTRを持っているので心配要らない
WM_LBUTTONDOWN、WM_LBUTTONUP以外で マウスのボタンが押されているかどうか取得する関数はないでしょうか?
758 :
デフォルトの名無しさん :04/01/14 19:59
>>756 どもども。できますた。
IDはNULLじゃないといけないのですね。
最初、NULLにしてもspy++で「無効なウインドウ」になるので
試行錯誤してみましたが、CWnd派生クラスのインスタンスは
ヘッダの方で public または protected で作らないといけないようです。
OnCreateの中で生成してはいけないようです。
// test4view.h の protected
CWndInfo m_wndINFO;
// test4view.cpp の OnCreate
CString strWndClassName = AfxRegisterWndClass(NULL);
m_wndINFO.CreateEx(NULL,
strWndClassName, "インフォメーションウインドウ",
WS_OVERLAPPEDWINDOW,
CRect(0,0,0,0), NULL, NULL);
m_wndINFO.ShowWindow(SW_SHOW);
m_wndINFO.UpdateWindow();
とりあえず、これで表示できました。
>>757 どうして他の関数が必要なの?
たしか、メッセージループを介さないで取得できる方法があったような・・・。
CWnd のWindowProc( )ですけど、これ、どうやって実装してる のかなぁ。見ると protected で virtual でやってるけど、 これでOSから呼び出すことができるんだろうか。 自分でウインドウをクラス化したときは public の static でWindowProcを作ったんだけど。 これだと関数のアドレスが一意に定まるんですが static を付けないと関数のアドレスは不定ですよね。
GetAsyncKeyState(VK_LBUTTON) GetAsyncKeyState(VK_RBUTTON) GetAsyncKeyState(VK_MBUTTON)
763 :
デフォルトの名無しさん :04/01/14 23:32
>>762 どうもです。
やはり独自のウインドウプロシージャを用意していたのですね。
しかし、それがDefWindowProcをフックしたものとは想像外でした。
DefWindowProcをフックして AfxWndProc( ) に置き換えていると。
WINCORE.CPPのソースを見ると、AfxWndProc( ) は
static CWnd* CWnd::FromHandlePermanent(HWND);
を使って、MSGに含まれる hwnd から、hwnd を所持する
CWndへのポインタを取得しています。その後、この
CWnd*をAfxCallWndProc( )に渡していて、そこから
lResult = pWnd->WindowProc(nMsg, wParam, lParam);
で、CWndのWindowProcを呼び出しています。
ここで疑問が2つ。
(1) FromHandlePermanet( ) は CWnd* を返すので、
pWnd->WindowProc ではCWnd派生クラスの WindowProc は
呼ばれないのではないか?
(2) hwnd にCWnd派生クラスのインスタンスが結びつけられて
いない場合、 FromHandlePermanet( ) はNULLを返します。
しかしAfxWndProc( ) はNULLの場合を規定していない。
(ASSERT(pWnd != NULL); としています。)
これだとCWndを使ったウインドウと、使わないウインドウが
混在した場合、エラーが起こるのではないか?
実際にはMFCプロジェクトでAPIを使ってボタンウインドウを作成
して試してみましたがエラーは起こりませんでした。
まだ何か秘密があるんでしょうか?
764 :
デフォルトの名無しさん :04/01/14 23:32
>>763 続き
C++って派生クラスのポインタを基底クラスで渡されたときに、
そこから元の派生クラスのポインタを(明示せずに)復元する機能
ってありましたっけ? この辺の理解はまだちょっと怪しいので
アドバイスいただけるとありがたいです。
「私はC++の仮想関数について知りません」 とでも云いたいのかね?
>>765 ああ、そうか。仮想関数を使えばいいのか。
失礼しますた。
768 :
デフォルトの名無しさん :04/01/15 02:44
質問させてください。 MDI環境で、新規作成メニューを選ぶとダイアログが表示されるように したいのですが、どこを、どういじればいいでしょうか?
770 :
デフォルトの名無しさん :04/01/15 06:21
スクロールバーの表示範囲を 状況によって可変にしたくて 状況に応じてSetScrollRangeを使っても 表示範囲が思い通りにいきません。 ツマミの位置も途中から進まないようになってしまいます。 どうすればいいのでしょうか。
16bit限界超えてるとかいう話ではないのか?
772 :
デフォルトの名無しさん :04/01/15 19:13
VC6+MFC+MDIで勉強をしている者です。 532さんの質問とちょっと似ているのですが、質問させてください。 ツールバーにCChildFrameで配置したコンボボックスに、 CFormViewから文字列を追加したく以下のとおり記述したのですが、 pComboBoxにNULLが入ってしまい、文字列を追加することができません。 int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { : : m_childwndProcessSelectBox.Create( CBS_DROPDOWNLIST | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, rect, &m_childwndToolBar, IDC_PROCESS_SELECTBOX); : : } int CXXXView::OnInitialUpdate() { : : CComboBox *pComboBox = (CComboBox *)GetDlgItem(IDC_PROCESS_SELECTBOX); pComboBox->AddString( _T( "文字列" ) ); : : } どのようにしたら文字列を追加することが出来るのでしょうか…?
コンボボックスの質問でよくあるのが、「ボタン押してもドロップダウンリストが表示されない」
っていうのがあって、その場合の解決策はダイアログエディタでコンボボックスの
ボタン押して表示されるドロップダウンリストの大きさを設定するか、コンボボックスの
大きさ設定で縦の長さを設定すれば、ダウンリストが表示されるようになる。
原因がそれ以外なら
>>772 の内容だけではよくわからない。
>>772 ちょっと文章がおかしかったんで修正します。
×:ツールバーにCChildFrameで配置したコンボボックスに、
○:ツールバー上置かれたコンボボックスに文字列を追加するため、
>>773 さん
返答ありがとうございます。
773さんの仰ることは出来ています。
具体的に言うと、CChildFlame内ではAddStringは出来るのですが、
CXXXView内でAddStringをしようとすると、pComboBoxがNULLで出来ないということなんです。
とりあえずソースをもうちょっと追加しておきます。↓
// CChildFrame.h #define COMBOBOX_INDEX 0 #define COMBOBOX_WIDTH 150 // CChildFrame.cpp int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { : : m_childwndToolBarMoldFlow.SetButtonInfo(COMBOBOX_INDEX, IDC_PROCESS_SELECTBOX, TBBS_SEPARATOR, COMBOBOX_WIDTH); m_childwndToolBarMoldFlow.GetItemRect(COMBOBOX_INDEX, &rect); rect.top = 0; rect.bottom = rect.top + 120; if( !m_childwndProcessSelectBox.Create( CBS_DROPDOWNLIST | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, rect, &m_childwndToolBarMoldFlow, IDC_PROCESS_SELECTBOX) ) { TRACE0("Failed to create ComboBox\n"); return FALSE; } : : } // resource.h #define IDC_PROCESS_SELECTBOX 32816 // resource.rc STRINGTABLE DISCARDABLE IDC_PROCESS_SELECTBOX "処理選択\n処理選択" END
困っています。 教えてください。。。 (すべてon draw関数の中に記述する。) viewクラスのon draw関数の中で CBrush brushBlue(RGB(0,0,255)); CBrush* oldBrush=pDC->SelectObject(&brushBlue); CRgn myRgn; //リージョンの確保 myRgn.CreateRectRgn(6,6,12,12); //領域 pDC->SelectObject(&myRgn); //myRgnの示す領域を有効にする pDC->SelectObject(&brushYellow); //ブラシの選択 pDC->PaintRgn(&myRgn); //現在のブラシで領域を塗る pDC->SelectObject(oldBrush); とmyRgnの領域を塗ることはできるんですが、この後、なんの処理(以下のような)もおこなえません。 Brushを使い終えたときに終わりを意味する宣言がいるんですか? (以下のような処理) // bufにkの値を入れdisplayに出力 char buf[80]; sprintf(buf,"ati=%d",k); pDC->TextOut(20,20,buf); コンパイルするとエラーなしで、実行できるんですが表示をおこなってくれない。
>>776 myRgn.CreateRectRgn(6,6,12,12); //領域
pDC->SelectObject(&myRgn); //myRgnの示す領域を有効にする
これで描画領域を限定してるんじゃないの?
myRgn.CreateRectRgn(6,6,412,412);
pDC->SelectObject(&myRgn);
こうしたら、文字も表示されたよ。
778 :
デフォルトの名無しさん :04/01/15 21:53
ありがとうございます。こちらもできました。 ホントに助かりました。ありがとうございました
779 :
デフォルトの名無しさん :04/01/16 02:33
デスクトップ画面をキャプチャしてビットマップファイルに保存したいんですが、
ttp://switchblade.ddo.jp/cgi-bin/item/img/204.jpg こんなふうに、できあがったbmpファイルの内容は、なぜか下にずれてしまいます。
以下のソースで、何か間違っている所があるのでしょうか。
HDC memDC, dtDC;
dtDC = ::GetDC(NULL);
int dtWidth, dtHeight;
dtWidth = ::GetDeviceCaps(dtDC, HORZRES);
dtHeight = ::GetDeviceCaps(dtDC, VERTRES);
BITMAPINFO bmi;
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = dtWidth;
bmi.bmiHeader.biHeight = dtHeight;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = 0;
bmi.bmiHeader.biXPelsPerMeter = 0;
bmi.bmiHeader.biYPelsPerMeter = 0;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biClrImportant = 0;
LPBYTE pBits;
HBITMAP hBmp, hOldbmp;
hBmp = ::CreateDIBSection(dtDC, &bmi, DIB_RGB_COLORS, (void **)&pBits, NULL, 0);
memDC = ::CreateCompatibleDC(dtDC);
hOldbmp = (HBITMAP)::SelectObject(memDC, hBmp);
::BitBlt(memDC, 0, 0, dtWidth, dtHeight, dtDC, 0, 0, SRCCOPY);
::GdiFlush();
780 :
デフォルトの名無しさん :04/01/16 02:33
続きです。 BITMAPFILEHEADER bmfh; bmfh.bfType = 0x4d42; // "BM" bmfh.bfSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+(dtWidth*3*dtHeight); bmfh.bfReserved1 = 0; bmfh.bfReserved2 = 0; bmfh.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); CFile file("d:\\bmp.bmp", CFile::modeCreate|CFile::modeWrite); file.Write(&bmfh, sizeof(BITMAPFILEHEADER)); file.Write(&bmi.bmiHeader, sizeof(BITMAPINFOHEADER)); file.Write(pBits, dtWidth*3*dtHeight); file.Close();
>>772 , 775
よく調べてないけど、タイミング的にツールバーがまだなのかな。
CToolBarの派生クラスを作ってOnUpdateCmdUIで処理してみたら?
とりあえず、この計算式は間違い: dtWidth*3*dtHeight
784 :
デフォルトの名無しさん :04/01/16 16:00
Visual C++ .NET Standard 2003って商用利用できますか? Visual Studio .NET Professional 2003の方にしないととライセンス違反になるのでしょうか?
785 :
772, 774, 775 :04/01/16 16:21
>>782 さん
返答ありがとうございます。
782さんのご意見を参考にして、
CXXXViewでコンボボックスのCBN_SELCHANGEのUpdate関数を作り、引数の「CCmdUI* pCmdUI」を
CComboBox *pComboBox = (CComboBox *)pCmdUI->m_pOther;
というようにしたら上手くCComboBoxのアドレスを取得することが出来ました。
ご助言いただきありがとうございました。
>>784 たぶん問題ないと思うけれど。
アカデミックなら、制限あるかも知れないけどさ。
いちおー 確認するのが吉。
>>781 はい、キャプチャした瞬間のマウスの高さ分だけ下にずれてしまいます。
>>783 本当は4bytes境界のことを考えなければいけないんですよね。
とりあえず1024*768でテストしてたので、端折ってしまいました。
779のソースを、int main(){ ... } で括って、 CFileをstdioにしてコンソールアプリとしてコンパイル&実行してみたが、 出力ファイルに特に異常な点は無かったよ。 GetDC(NULL)のDCに変な属性でも付いてるんじゃないのか。
790 :
デフォルトの名無しさん :04/01/16 22:17
VCとかC++でネットワーク系のプログラムを組みたいんだが なにかおすすめの本とかありませんかね?
とりあえずGetDC(NULL) → CreateDC("DISPLAY",NULL,NULL,NULL) としても結果は変わりませんでした。 で、マウス位置に比例してずれていたので、ShowCursor()でカーソルを 消去してからGetDC(NULL)すると成功しました。 また、コントロールパネルで「マウスの影を有効」のオプションを切ると、 ShowCursor()するまでもなく成功しました。理由はわかりません。 # 影が有効でもちゃんとキャプチャしてくれるソフトはGetDC()等使ってないんでしょうか..
>>791 俺みたいな初心者でも買いなんでしょうか・・・
みたかんじ少し敷居が高い感じが・・・
795 :
デフォルトの名無しさん :04/01/16 23:40
namespaceについて VC6で、 #include <vector> using std::vector; int main() { vector<int> vec; vector<int>::iterator it; return 0; } と書くと、 error C2653: 'vector<int,class std::allocator<int> >' : 識別子がクラス名でも名前空間名でもありません。 と言われる。なんで? std::vector<int>::iterator it; と書けばとおるけど・・・ g++ではstdをつけなくてもコンパイルできたよ
>>795 VC6がヘボだから。
using statementはVC7でもダメで7.1でようやく使える。
いや・・・
今、リスト処理でvalueがkeyと等しい場合にtrue、 等しいものが無かったらfalseを返す関数existを作ったんですが return false;のところでAccess Violationが出てしまいます。 これは何が悪いんでしょうか。 VC++の問題かどうかだけでも教えてください。 宜しくお願いします。 struct list { int value; struct list *next; } l; bool exist(struct list *l, int key) { if (l->next == NULL) { return false; } else if (l->value == key) { return true; } else { return ((exist(l->next, key))); } }
Cスレへどうぞ
有難う御座います。
ひとつのインスタンスからCreateWindowで複数個ウインドウを付くることは出来ないのでしょうか?
802 :
デフォルトの名無しさん :04/01/17 13:04
質問させてください。 VC++6.0 で 、基本クラスをCFormView に設定したSDIプログラムを 作成しています。この上に、3つのラジオボタンを貼り付け、 C***View のOnInitUpdate()の中で、GetDlgItem()を使って それぞれのコントロールを取得しました。 (暫定的に、グローバル変数にしています。) そして、クラスウィザードから、ラジオボタンがクリックされた 時のハンドル関数を追加し、この中で、 (そのコントロール)->SetCheck(0) などのようにメンバ関数を呼び出そうとすると、エラーになって 落ちてしまいます。ハンドル関数の中で、再び、GetDlgItem()を 使ってコントロールを取得し直すと、正常に動きます。 これは、毎回、コントロールを取得する必要があるという ことなのでしょうか。
>>802 > 暫定的に
というのがどうやっているのかうまく理解できませんが、
いちいち
CButton* button = (CButton*)GetDlgItem(IDC_BUTTON1);
と記述するのが面倒くさいのならば
素直にコントロールのメンバ変数を作った方が早くなると思います。
804 :
デフォルトの名無しさん :04/01/17 14:03
>>795 です。
>>796 ありがと
こういう感じの、VCと標準C++との差異がまとまってるサイトとかって
ありますか。
805 :
デフォルトの名無しさん :04/01/17 14:13
>>803 ご指摘ありがとうございます。
クラスウィザードからメンバ変数を追加するという
手段についてなのですが、自分の開発しているアプリでは、
ラジオボタンなどのコンポーネントが非常に多いため、
コントロールを配列で取得して、ロジックを単純化
しようとしています。ですので、できれば、ソース上で
配列を宣言し、初期化の時点で全てのコントロールを取得して
しまいたい、と思っているのです。
※ ダイアログベースで開発していたときは、ダイアログクラスの
メンバ変数に、コントロール用の変数を配列で宣言して、
OnInitDialog() で取得すれば、あとはずっと使えたのですが…
>>805 GetDlgItem で取得したポインタは一時オブジェクト(そのうち削除されてしまう)
だから、グローバル変数とかメンバ変数に記憶して使い回すのは、不可。
>※ ダイアログベースで開発していたときは・・・
たまたま、うまくいってただけですな。
DDX変数を手書きすれば配列使えるから、それでやるのが一番要求に合うと思う。
IDだけ指定すれば操作できる
CheckDlgButton() / IsDlgButtonChecked()
CheckRadioButton() / GetCheckedRadioButton()
なんてものある。事足りるんなら、これでやるのも手。
>>801 CreateWindowってAPIの話?
OnInitUpdate() ってどのクラスのメンバ関数? MSDNで調べても分からなかったんで。
CWnd::GetDlgItem 返されるポインタは、一時的なポインタです。後でこのポインタを使って 値を格納することはできません。 と解説がありますね。
つか OnInitialUpdate ですな。
813 :
デフォルトの名無しさん :04/01/17 19:53
ちょっと前の「山を下るボール」に触発されて ビットマップを移動させるサンプルを書いてみた。 ビットマップを貼り付けた子ウインドウを移動させる 形にしたけれど、やっぱこれがやり易い方法かな。 「山を下るボール」の背景の山はどういう風に 処理してたんですかね? BMPで背景を提供すると めちゃくちゃサイズが大きくなりそうだが。
814 :
デフォルトの名無しさん :04/01/17 19:59
>>813 ところでビットマップはVCのエディタで書いてるんですけど、
透明な色を指定することはできますか?
背景色を透過させるようなことはできないのかな?
>> 806 >> 809 どうも、ありがとうございます。教えて頂いた方法で 実装してみようと思います。 >> 808 >> 812 すいません。OnInitialUpdate の間違いでした…
816 :
デフォルトの名無しさん :04/01/17 23:57
DOSコンソールでのソフトをつくっています。 いま、 ある関数GpIni()が、ヘッダファイルgpib.hにて宣言されています。 その関数はgpib.dllにはいっています。 いま、そのdllを参照する設定ができていないため、 リンカをたちあげると TestGPIB1.obj : error LNK2001: 外部シンボル "_GpIni@0" は未解決です Debug/TestGPIB1.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー がでてしまいます。どのようにして、dll内の関数を参照させたらよろしいのでしょうか。
817 :
デフォルトの名無しさん :04/01/18 00:01
? ?
環境および、ソースもあげます。 環境:Windows 2000pro+VC6.0 ソース **TestGPIB1.cpp #include <windows.h> #include <stdio.h> #include ".\Gpibac.h" void main() { DWORD Ret; Ret = GpIni(); printf("%ld",Ret); } **gpib.h #ifdef __cplusplus extern "C" { #endif DWORD WINAPI GpIni(void); #ifdef __cplusplus } #endif
gpib.libをリンクする。
はい、確かにgpib.libというものが存在します。 そのリンクのさせ方がわからないのです。 VCのGUI画面でビルドをおこなってます。
#include ".\Gpibac.h" #pragma comment(lib, "gpib.lib") と書いておけ
822 :
デフォルトの名無しさん :04/01/18 00:40
>>820 プロジェクト > 設定 > リンクタブ
> オブジェクト/ライブラリモジュール
ここのところに gpib.lib を書いたら良いんじゃないですかね?
うまくいきました。 ありがとうございました。!!
>>814 無い。自分で1色透過したい部分の色を決めて、
その色の時は背景の方を表示する処理を自分で作る。
>>824 なるほど。じゃあ、BitBltで単純なコピーはできなくなるわけですか。
それは面倒ですね。
>>825 マスク使えば出来る
といっても二回貼り付けなきゃならんのだが…
素数判断するプログラムなんですけど「4」を入力すると 素数と判定されてしまいうまくいきません アドバイスよろしく #include<stdio.h> main() { int n;//入力する数 int j=0;//割れることができた整数の数 int i; printf("整数を入力してください\n"); scanf("%d",&n); for(i=1;i<n;i++) { if(n%i==0) j=j+1; if(j==3)//割ることができる整数が3つあるので素数でない break;//for文の外に出る } if(j==3) printf("素数でない\n"); else printf("素数である\n"); }
× for(i=1;i<n;i++) ○ for(i=1;i<=n;i++)
>#include ".\Gpibac.h"
マジ?
>>827 素数の判定方法として1からn-1までループを回すなら、素数はjが2になってしまう。
それはさておき、
・意味不明な一文字変数はやめよう。
・本当に1からn-1までカウントしなければならないか検討しよう。
・そもそも割れる数をカウントすること自体に意味があるかどうか検討しよう。
まぁ、一般的な回答は宿題スレの過去ログに腐るほどあると思うが。
>>828 同じ数で割ってなかったんですね;;
無事できました
>>818 > 環境および、ソースもあげます。
> 環境:Windows 2000pro+VC6.0
奇特な人だな。
ソースはいらんから、環境だけ送ってくれ。
>>827 ,
>>830 > 割ることができる整数が3つあるので素数でない
はぁ ?
> 無事できました
ならいいか、まあ俺には関係のないことだし。
>>830 そのソースなら3つ以上だろうよ。
なんにしても相当に非効率だな。しかし
j=j+1
を見ると基礎からやり直せと(ry
テンプレートクラスを書いたソースファイルをプロジェクトに加えると リンクエラーが発生してリンクできません。 (同じソースファイルに入れるとリンクできます) VC++6.0です。
そうですか。
>>832 > そのソースなら3つ以上だろうよ。
^^^^^
はぁ ?
>>827 のどこに「以上」なんて書いてあるんだ ?
> を見ると基礎からやり直せと(ry
ずいぶんと些細な基礎だな。
>>827 は他にやることの方が多いと思うぞ。
836 :
デフォルトの名無しさん :04/01/18 13:39
すいません 質問させていただきたいのですが 環境は WINDOWS2000PRO VC++6.0 を使用してプログラムをくんでいます。 ダイアログに関する質問なのですが、リソースエディッタでピクチャーを選択して ダイアログに設置してプロジェクトにも参加させました。 そして ダイアログのプロセス部分のソースに 以下のプログラムを記入してコンパイルしたのですが HBITMAP hBitmap; BITMAP bm; HDCdc,memdc; HWNDDighwnd; //hWnd ダイアログのハンドルのはいった変数 Dighwnd=GetDlgItem(hWnd,IDC_STATICBMP//ピクチャーのID); hBitmap=(HBITMAP)LoadImage(hInst,"test_001.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); GetObject(hBitmap,sizeof( BITMAP ), &bm); dc = GetDC(Dighwnd); memdc = CreateCompatibleDC(dc); SelectObject(memdc,hBitmap); BitBlt(dc,0,0,64,64,memdc,0,0,SRCCOPY); DeleteDC(memdc); ReleaseDC(Dighwnd,dc); DeleteObject(hBitmap);//ダイアログ終了時に記入 ピクチャー部分に BMPの表示ができないのです。 Googleなどで 検索したんですが 納得できる答えが見つからない状態でして どうか どなたかご教授 お願いします
837 :
デフォルトの名無しさん :04/01/18 14:20
MFCでCTreeViewを使おうと思ったんですが、 アイテムの左側の画像って自分で用意しないと いけないんでしょうか? せめて + と - くらいデフォルトがあっても 良さそうなものだと思うのですが。 あとツリーを表現する点線と。
VC++.netでダイアログにイベントハンドラの追加ってどうやるでしょうか。 VC++6.0ではダイアログ右クリックのClassウィザードでできた奴なんですが。 .netではボタンとかの部品に対してなら同じ操作ができますけど。 OnCommandとかを追加したいんですけど・・・
スタイル抜群のお姉さんを設定できる
841 :
デフォルトの名無しさん :04/01/18 14:51
>>839-840 どもども。+ と - は表示させることができました。
ツリーの線は表示できないですかね?
842 :
デフォルトの名無しさん :04/01/18 14:55
>>841 線もできますた!
ありがとうございますた。
843 :
デフォルトの名無しさん :04/01/18 14:58
C++初心者なんですがクラスについて勉強していて 疑問に思ったことがあるので質問します シューティングゲームなどで プレイヤーがある操作(ボタンを押す、等)をするとき 自機から弾クラスが発射される毎に 弾クラスがtama00,tama01,tama02・・・ と毎回違う名前で連番付けされながら生成されるようにしたいんですが そのようなことってできますか?
>>843 CTama* pTama[100];
pTama[0] = new CTama;
pTama[0]->TamaMove( );
pTama[1] = new CTama;
pTama[1]->TamaMove( );
こういう感じにしたらどうですか?
Tamaの数を自由にしたければ
vector<CTama> v_Tama;
なんてのももいいかな?
ランダムに弾が消えたり作られたりするんじゃないか、 と考えvectorより、listがいいのでは、と言ってみる。
俺だけは天才だ
848 :
デフォルトの名無しさん :04/01/18 17:19
ファイルの中身が 数値(改行) 数値(改行) | ←カーソルがこの位置にある状態 かどうかを調べたいのですがどうやってやればいいのでしょうか? ReadFile()でファイルの内容を変数にフコピーし、その変数の内容をif文でチェックします。
>>848 テキストファイルにはカーソルの位置などは
記録されてないのでは?
void Test(int n = 2, int m = 2 ){ return; } 引数が2つあって、1、2番目ともデフォルト値がきまっているとします このとき、 2番目だけ値を設定したい場合 Test(○ ,1); ○の1番目はどうしたらいいですか?
話しによれば・・ 数値 ←CR+LFコード 数値 ←CR+LFコード ←EOFコード らしいです・・・Windowsプログラミングだからスレ違いだったらスマソ
>>851 んと、「カーソルがそこまで動くファイル」という意味だったらそれでただしいよ
でも、「カーソルの位置」を知るという意味ではただしくないよ
(テキストファイルにはカーソルの位置がどこにあったかは記録されない)
EOFコードってのはファイルの終わりって意味ね
(実際はコードが入っているわけじゃないんだけどね)
一応、勘違いしてると後で困ると思うので言わせてもらいました
>>848 Cの標準ライブラリでEOFを調べる関数があったと思ったが、
それのことかな。
MSDNってCのライブラリ載ってないよね。
ちょっとしたことで、わざわざSTL使いたくないときには
Cのライブラリは簡潔でいいんだが。
数値 ←CR+LFコード 数値 ←CR+LFコード ←EOFコード これをどうゆう場面で使いたいのかと言いますと、読み込んだファイルの中身が上の上体だった場合だけ 上の数値を画面に出力すると言うことをしたいのデス。 ファイルの中身が 10 10 10 だったり、 文字 スペース だったり、 改行 10 10 だったり、と上のと違う場合は出力したいくないんです・・・
856 :
デフォルトの名無しさん :04/01/18 20:10
2つの文字列を入力し、数値化したものを比較、勝敗を表示する。但し文字列と数値データは構造体で扱う。又、文字列、→数値変換はmoji_ten()関数を処理する。準備するもの@構造体定義より {文字列列用・・・char型(20バイト以上) {点数用......int型A数値変換はmoji_ten関数を使用する。名前を入力させ攻撃用文字列と防御用文字列と体力など攻撃力と防御力設定する。 画面のイメージ↓ ///////////////////////////// /player1の名前を入力して下さい→ /player2の名前を入力して下さい→ /player1の武器を選んでください→ /player2の武器を選んでください→ /player1の防具を選んで下さい→ /player2の防具を選んでください→ / 戦闘開始 / player1体力500player2体力500 / 1ターン目player1に100のダメージplayer2に200のダメージ / 2ターン目player1400のダメージplayer2に300のダメージ / 引き分けです。 /////////////////////////////////////////// こんな感じで表示させたいです。player1かplayer2のダメージはランダムであと引き分けありで 表示させたです。 最初のこんなしかわりません。w #include struct BATTLER { char name[20] int ten }; void moji_ten(struct BATTLER *); void main(void) { 次からよくわりません教えてください。文字列バトラーの応用です。お願いします。
質問させていただきます。返答よろしくおねがいします。 viewクラスのon draw関数に主にプログラムを記述しています。 そこでプログラムを書いていて、計算を行わせて値(K)が正しく値を とっているかを確認するのに char buf; sprintf((buf,"%d",k); pDC->TextOut(6,6,buf); としています。 しかし、自分でメンバ関数をつくり、メンバ関数内で同じ確認を行いたいときに 上の確認のように書くとできません。 どこがいけないのでしょうか?おしえていだだきたいとおもいます。 また、これでできないなら、他の確認方法ご存知の方お願いします。
858ですが、 コンパイル後のエラーは以下のようになります D:\cgengo\torichan\torichanView.cpp(419) : error C2664: 'sprintf' : 1 番目の引数を 'char' から 'char *' に変換できません。 (新しい機能 ; ヘルプを参照) D:\cgengo\torichan\torichanView.cpp(420) : error C2065: 'pDC' : 定義されていない識別子です。
×:char buf; ○:char buf[32];
(自分:
>>851 >>855 )
>>857 自分の認識だとperlって名前のプログラム言語だと思うんですけど…。
Winプログラムで作らないといけ無いんですよね…。
ここで使えそうな関数は知らないので地道にif文で調べて行きたいのですが、
そのif文で調べる方法がよく分からないんですよね。
CRコードは10進数で10 LFコードは10進数で13らしいのですが、、、
変数の中は、
数値(何桁か不明)CR+LFコード数値(何桁か不明)CR+LFコード EOFコード
ってなってると思うんだけど・・・
説明がヘテレでスマソorz
>>858 OnDraw()メソッドの引数で、デフォルトでpDCがコメントアウトされてるのは.netからだっけ?
858ですが、 質問の内容が変わりまして、 error C2065: 'pDC' : 定義されていない識別子です。 というエラーがでたので 自分で作ったメンバ関数内で char buf; sprintf((buf,"%d",k); pDC->TextOut(6,6,buf); が行えないのは、なぜですか?にさせていただきます。 おねがいします。 あと、これでできないなら、他の確認方法ご存知の方お願いします。 も再度おねがいします。
最近ビルド開始すると、MSDEV.EXEのエラーが出て、 プロジェクトが落ちてしまう事があるのですが、 どういう原因が考えられますか? ちなみに、VC++6.0、AthlonXP1800+、mem512MB、ハードディスク空き1GB。
chkdsk してみた?
>>863 んだから、
VC++6.0でウィザードで作成したものではコードがOnDraw(CDC *pDC)になるけど、
VC++.NETではこの部分がOnDraw(/*CDC *pDC*/)と書かれてないかい?
コメントアウトされているので、pDCというポインタそのものが定義されてないんだよ。
本に書かれてるコードとは違ってるわけ。
初心者本を見てつくってるんでしょ?その分じゃ。
文字列のポインタもわからない段階からMFCに手をつけるのは無謀。
いっそC#からはじめるか、「猫でもわかるプログラミング」というサイトをみて、
MFCではなくwin32SDKの使い方から覚えたほうがいいよ。
>>857 VC++のMSDNでも日本語版を見つけました。
ランタイムルーチンというところに収録されてんですね。
ちとわかりにくい。
VC++6.0で質問です。 BMPを表示しようと思うのですが、 WM_PAINT毎に、BMPを読み込んでBitBltするのは効率悪いと思い WM_CREATE時にBMPを読み込んで一旦バッファ(?)に格納し、 WM_PAINT毎にバッファから画面に貼り付けようと思うのですが、 表示されません(ウインドウは表示されるがBMPが表示されない)。 どこかにサンプル、もしくわ参考になるHPはありませんでしょうか? WinXP+VC++6.0で、MFCは使っていません。
>>863 pDCは OnDraw の引数として与えられるものだからね。
void CExtTreeView::MyDisp()
{
CDC* pDC = GetDC();
CString str("萌え萌え〜〜〜〜");
pDC->TextOut(10,10, str);
ReleaseDC(pDC);
}
この関数をOnDrawから呼び出しても表示できるよ。
自分でpDCを作成して使ってます。
まあ、悪い例だけどね。
>>869 CTreeViewの派生クラスになってるけど、
CTreeViewじゃだめです。
CViewの派生クラスじゃないと。
871 :
デフォルトの名無しさん :04/01/19 00:29
>866 C#は止めとけ。転職しようと思って探したけどC#は一つも無かった。 CかC++かJAVAが殆ど。
872 :
デフォルトの名無しさん :04/01/19 03:14
CTreeView でフォルダのスモールアイコンのように ビットマップやアイコンをアイテムの左側に表示させることが できますよね。これに CImageList のインスタンスを 使うわけですが、このイメージリストを複数のViewで 共有しようと思って、CWinAppクラスにインスタンスを public で保持して、Viewクラスからは CImageList* pImgLst; pImgLst = &( dynamic_cast<CSplitWndApp*>(AfxGetApp())->m_ImgLst ); GetTreeCtrl().SetImageList(pImgLst, TVSIL_NORMAL); このコードでアクセスしようと思ったんです。 しかし、これではアイコンがツリービューに表示されませんでした。 エラーもでません。CImageListのインスタンスをViewクラスで 保持して同じコードを書くと、正常にアイコンが表示されます。 これはどの辺が問題なのでしょうか? C++言語としては間違ったことはやってないように思うのですが。
>>864 おそらく「仕様」です。
特に Win2k 使ってるとしたら。
うちでも、挙動不審だったなぁ。
ビルドしようとすると数秒間固まってみたり…
そのまま落ちてみたり……
仕方ないので、「すべて保存」を定期的にするか、
VC7.1 を使いましょう。
>>872 (AfxGetApp())が問題の部分。というか無意味な部分。
かっこの位置が間違ってるんじゃないかと。
&( (dynamic_cast<CSplitWndApp*>AfxGetApp())->m_ImgLst );
じゃないのかと。
// 唯一の CMyApp オブジェクト CMyApp theApp; CMyApp* GetMyApp() { return &theApp; } いちいちキャストすんの面倒だから、こうしてるんだけど、問題あるのかなぁ?
876 :
デフォルトの名無しさん :04/01/19 08:25
MFCで作ってるんだけど、ListViewコントロールを使って 特定のディレクトリ内のファイルを列挙したいんだけど、 どうやればいいの?
>>873 確かにw2kです。仕様ですか・・・。
ちなみに、以前はエラーが無かったのですが、
プロジェクトがちょっと大きくなってきたら
落ちるようになってしまったような気が・・・。
>>877 そのスペックなら巨大関数でもなければ通ると思うけどねぇ。
関数分割は面倒だろうけど、ソース分割してフルビルドを避けるようにしてもダメだろか。
>>868 よくわからんが 変数のスコープ抜けてない?
あと WM_PAINT と WM_PAINT 以外で取得した HDC デバイスコンキテストは別扱い
>>874 pImgLst = &( (dynamic_cast<CSplitWndApp*>AfxGetApp())->m_ImgLst );
これだとコンパイラ通らないでつよ。
シンタックスエラーでした。
extern CSplitWndApp theApp; CImageList* pImgLst; pImgLst = &( theApp.m_ImgLst ); GetTreeCtrl().SetImageList(pImgLst, TVSIL_NORMAL); こういう方法もアリですかね。 コンパイラは通りましたが実行結果は やはりイメージが表示されない。 うまく逝った人がいれば教えてください。
デバッグ中のアプリケーションを終了したら、 -------------- Detected memory leaks! Dumping objects -> {308} normal block at 0x00F22638, 0 bytes long. Data: <> Object dump complete. -------------- とかって表示されたよ。 0バイトのメモリリーク?何じゃそりゃぁ! ...いつこのような問題がおきるのか知ってる人がいたら教えてくださりませ。
>>882 new int[0] ってやると、そうなったよ
CListViewの表示で行き詰まってしまいますた。 CExtListViewのOnInitialUpdateで次のように記述した のですが、まったく表示されません。 ///////////////////////////////////////////////////// // ListCtrlのスタイルの設定 DWORD dwStyle; dwStyle = GetWindowLong(GetSafeHwnd(), GWL_STYLE); dwStyle |= LVS_EDITLABELS | LVS_LIST; SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle); DWORD dwExStyle; dwExStyle = GetListCtrl().GetExtendedStyle(); dwExStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES; GetListCtrl().SetExtendedStyle(dwExStyle); /////////////////////////////////////////////////////// // ListCtrlコラムの設定 CString str; for(int nCol=0; nCol<4 ; nCol++) { str.Format("コラム No.%d", nCol); GetListCtrl().InsertColumn(nCol, str, LVCFMT_LEFT, 100); }
885 :
デフォルトの名無しさん :04/01/19 13:41
>>884 この段階で表示されるわけではないのでしょうか?
コラムはまったく表示されませんでした。
ちなみに次のようにアイテムの追加も行いましたが
デバッカでみるとInsertItemではエラーコードの-1が
返ってきました。
///////////////////////////////////////////////////////
// ListCtrlアイテムの追加
LVITEM item;
item.mask = LVIF_TEXT | LVCF_SUBITEM;
for(int nItem =0 ; nItem<10 ; nItem++) {
for(nCol=0 ; nCol<4 ; nCol++) {
str.Format("アイテム : %d - %d", nItem, nCol);
item.pszText = str.GetBuffer(50);
item.iSubItem = nCol;
if (nCol == 0) GetListCtrl().InsertItem(&item);
else GetListCtrl().SetItem(&item);
}
}
>>884 キター!進展アリ!
スタイルが問題だったようです。
スタイルの設定の部分を LVS_LISTではなく、
GetListCtrl().ModifyStyle(NULL, LVS_REPORT);
にしたら、とりあえずヘッダが表示されますた。
とりあえずご報告まで。
>>886 キター!当初の目的を達成!
疲れた・・・。
ソースは長くなるんで、要請があったら
貼り付けます。
右側はSetItemTextで設定するんですな。
全部知ってたけどめんどくさいし基本だからすぐわかるだろうと思って放置してた。
>>877 1.そのプロジェクトのフォルダにある .ncb と .opt を消す。
2.SPを当て直す。
>>864 うちもMSDEV.EXEのエラーが出て、
原因はワークスペースファイルの破損だったよ。
新しいワークスペースを作って、そっちに
移しますた。
例えばですよ。 VBで作ったアプリケーション(ウィンドウ)に ウィンドウメッセージをVC++で作ったアプリケーションから送信したいんですけど VC++のサンプルソース誰かお願いします。 コンソールアプリでお願いします。
MFCプロジェクトとクラスウイザードで書いています。 Doc/View で、Viewを3分割して新しいViewを割り当てています。 メニューコマンドのハンドラをViewクラスの方でハンドリングしたい のですが、クラスウイザードでハンドルしてもまったく反応が なくなってしまいました。 BEGIN_MESSAGE_MAP(CExtListView, CListView) //{{AFX_MSG_MAP(CExtListView) ON_COMMAND(IDM_LVS_ICON, OnLVSIcon) //}}AFX_MSG_MAP END_MESSAGE_MAP() メッセージマップには確かに追加されているのに、 どうしてこのようなことが起こるのでしょうか? 同じ経験をされた方、おられませんか?
>>894 さん
動くソースお願いします。
サンプル見たほうが脳みその吸収率高いので
わがままですいません
お兄ちゃん厳し杉でぷ
>>895 自分で調べる気無いヤシに何教えてもムダだろう
899 :
デフォルトの名無しさん :04/01/19 23:02
サンプル見たら、それが自分の力というか技になるだろ。 アホかおまえ。 いちいち本で無駄な情報の中から必要な情報をあさることに 意味を見出そうとするオールドタイプの人間がなぜ プログラマに多いのか、という話にまで発展するぞ、ボケ 彼らは自分が他人よりパソコンの知識がすぐれている ということにしかアイデンティティーを見出せない人種だからだよ じゃなきゃ、聞かれたことは素直に教える罠 実際、そういう人間ばっかりだ<プログラマ業界
質問させてください。 AppWizard から CFormView を基本クラスにした SDI のスケルトンを用意してプログラムを書いています。 ダイアログ内に配置した「ピクチャー」コントロールに 画像ファイルをドラッグ&ドロップしたら、そこに 画像を表示する、というプログラムを書きたいのですが、 ピクチャーの拡張スタイルに「ドラッグドロップを許可」 と指定しても、実行するとドラッグ&ドロップできません。 ピクチャー本体は枠だけで、内側は対象範囲にならない のかと思い、PreTranslateMessageを追加して、マウス位置 を取得し、そのピクチャーの領域内であるかを判断して 処理を行えばいいかとも思ったのですが、そもそも、 ピクチャーの領域内でドラッグ&ドロップ自体ができない ので、解決になっていませんでした。 どなたか、このような動作を実装するための方法を 知っている方がいらしたら、ご教授お願いします。
>サンプル見たら、それが自分の力というか技になるだろ。 お前にゃ無理
>>893 新規にプロジェクトを立ち上げて、コードをコピーして
やり直してみましたが、やはりViewクラスは
メニューコマンドをハンドルしませんでした。
分割前なら、Viewでも普通にメニューアイテムの
On/Offができたと思うんですが、分割したのが
問題なのかな?
でもMSDNのVIEWEXサンプルでは分割のViewに
メニューのハンドラを設置できたんだけど・・・。
>>893 スプリッタウィンドウの場合、全部のViewにコマンドをルーティングしないといけない。
>>903 ありがとうございます。
現在色々と実験中ですが、左上(0行0列)の
Viewクラスのハンドリング関数だけが
実際にハンドリングされることが分かりました。
とりあえず報告だけ。
>>899 教えて君としてはいい筋だ。その調子でがんばりたまえ。
906 :
デフォルトの名無しさん :04/01/20 00:28
頻繁にメモリ間コピー等の操作を行うプログラムをC++で書いているのですが、 例えばコピーの際、用意するバッファに配列を使うとなると管理が大変なので std::vectorを使っています。使うと言っても、イテレータ等は使わず、 std::vector<BYTE> vec(BUFFSIZE); CopyMemory(&vec[0], src, BUFFSIZE); のようにです。ですが、どこかのサイトで vectorのバッファを直接いじるのはよくない みたいなことが書いてあった気がして、気になってしまいまして、つまり、 こんな使い方って、薦められたものではないんでしょうか。
>>904 そう。デフォルトだとその一つのViewにしかコマンドメッセージは送られない。
だからそのViewでメッセージを処理しないなら、他のViewにそのメッセージを転送しないといけない。
スプリッタウィンドウの作り方を検索すれば転送(メッセージルーティング)の方法も書いてあると思う。
>>906 std::vectorは問題なかったはず。std::string などではまずいが。
どうしても気になるなら普通の配列つかってそれをコピーすれば良かろう。
>>908 なるほど、良かったです。自分が気になっていたのは、間違った使い方をして
いたんじゃないかということだったので、でもよく考えたら、operator[] や at()が
実装されているってことは、バッファの各要素にアクセスする事を想定して作ら
れているってことでしょうから(この認識であっているんでしょうか…)、直接それを
操作したとしても何ら問題ないということですね。
となると
>>906 のサイトの件は自分の勘違いかもしれません。
VC++6.0のことで質問です。 プロパティページ中で、二つのエディットボックスで値を設定できるようにして、 m_edit_1(最大値)>=m_edit_2(最小値) となるようにしたいのです。 下のようにしたら、間違ったときに警告メッセージボックスがでてくれるのですが、 OKで戻ったときに、編集していたエディットボックスから選択が移動してるので、 OKボタンを押して終了することができてしまいます。 条件を満たすまで変更を求めるにはどうしたらよろしいのでしょうか。 void CPropertyPage_04::OnKillfocusEdit1(){ UpdateData(TRUE); if(m_edit_1<m_edit_2){ AfxMessageBox("最大値>最小値に設定してください"); return; } maxval=m_edit_1; }
>>909 >operator[] や at()が
それらはシーケンシャルなオブジェクトへのアクセスを実現するためのものであって、
シーケンシャルなメモリを直接指す物ではないんじゃないかな?
まあ、そこまで考える必要はないと思うけど
Win32APIになるんですが WM_KEYDOWNのlParamの30ビットを調べて1なら処理しないっていう記述はどうかけばいいでしょうか?
そんだけ切羽つまってんの_| ̄| ○
DWORD bitmask = 0x20000000; if(lParam&bitmask) { //処理しない } else { // 処理する } こんなんでどうだろう?
>>910 OnOK()でその処理すればいいと思うけど。
それか、DDV使って、こんな風に書くと良い。
void CPropertyPage_04::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COptionEngine)
・・・
//}}AFX_DATA_MAP
//最大値を入力するエディットボックスを指定
pDX->PrepareEditCtrl(IDC_EDIT1);
//最大値がm_edit2〜1000の間かチェックさせる。不正なら上で設定したコントロールにフォーカスが移る
DDV_MinMaxInt(pDX, m_edit_1, m_edit2, 1000);
}
↑ >//{{AFX_DATA_MAP(COptionEngine) の部分、書き換えるの忘れてた(;´Д`) //{{AFX_DATA_MAP(CPropertyPage_04) でよろ
918 :
デフォルトの名無しさん :04/01/20 21:07
>>918 そこのソースをコピペしてビルドしてみたが、別におかしな事はないけど。
VisualC++6.0 SP5。
920 :
デフォルトの名無しさん :04/01/20 21:33
質問です。 ファイルから座標を読み出して配列に入れたいのです。 ファイルの中身は 0 0.1 0.2 ・・・ のようなかたちで一行づつchar[]で読んでいたのですが、 double型にキャストできず、困っています。 上の座標をdouble型の配列に入れるのが目的です。 どなたかご指南ください。お願いします。
>>920 CStringからdoubleだと楽勝
>>919 うまくコンパイル通る時もあるし通らない時もあるんですよ。
だからタチが悪くて・・・。
今まで自分で作ってちゃんとビルド出来ていた色んなプロジェクトの、
適当なcppファイルの末尾に同様のコードをはめ込んで、そのファイルだけを
コンパイルすると、通ったりエラーだったりバラバラでした。
私の方で試してみてわかっているのは、今のところ「using〜」を
はずせば、確実に通るってだけなんですけども・・・
>>921 レスありがとうございます。
それはファイルオープンの時にCString型にいれるのですか?
できたら方法を教えてくださいませんか??
char[]に読み込んで、atofを一発かませば良いんでないの?
>>924 レスありがとうございます。
char buff[256];
double test;
if((fp = fopen(p, "r")) == NULL){
exit(0);
}
while (fgets(buff, 256, fp) != NULL) {
test[i]=atof(buff);
i++;
}
fclose(fp);
のような感じで現在やっておりますが、testの配列の方には
数値がはいってないのでエラーは出ませんが・・・。
もう少しいろいろやってみます。
>>916 どうも、ありがとうございました。 DDV_MinMaxFloat
を使って判定チェックできるようになりました。
でも、今してるのは、
実数で最大値>最小値というふうに、=をつけずにしたいのですが、
これが簡単なので妥協することにしました。
>>925 test[i]=atof(buff);
と格納してるのに、
double test;
と宣言されてるようだが。
関連したことでちょっとわからないことがあるのですが・・・ EDITボックスの数値の変更をすぐに使うので、 UpdateData(TRUE);は OnOk だけでなくて OnKillFocusEdit でも 呼んで数値のチェックをしていますが、これだと、 キャンセルボタンを押したときも Focusが移ったと 判断されデータのチェックをしてしまいます。 今は、以下のようにOnCancel中で i_cancel=1; として、そのときは OnKillFocusEdit を素通りするようにしてます。 これだと、ESCキーや、 ×ボタンで閉じたときは データチェックしないでプロパティシートを閉じてくれますが、 キャンセルボタンを押したときだけは、 先にOnKillFocusEditを呼ばれて不正なデータの再入力を求められます。 Focusが移った先がCancelボタンかどうかチェックできれば万事解決 な気もするのですが、こういうときはどうやるものなのですか。 void CPropertyPage_04::OnCancel(){ i_cancel=1; CPropertyPage::OnCancel(); } void CPropertyPage_04::OnKillfocusEdit2(){ // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください if(!i_cancel){ if(UpdateData(TRUE)){ //正常終了した場合 (!=0) data=m_edit_2; }else{ //異常があった場合 (==0) m_edit_2=data; UpdateData(FALSE); } }}
>>927 申し訳ありません、写し間違えです…。
double test[200];
として行っています。
>>910 >>928 ディットコントロールならOnKillFocusよりもEM_CHANGE使って入力のたびにデータの診断と更新する方が確実
エディットコントロールの入力時にチェックすればキャンセルの問題もなくなる
>>925 はい
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
main()
{
FILE *fp;
int i = 0;
char buff[256];
double test[200];
if((fp = fopen("testfile", "r")) == NULL){
exit(1);
}
while (fgets(buff, 256, fp) != NULL) {
test[i]=atof(buff);
i++;
}
return 0;
}
>>925 つっこみどころ多すぎるけど
後は自力でがんがれ
>>931 レスありがとうございます。
無事できました。僕自身の勘違いもありました。
助かりました、ありがとうございました。
>>933 勘違いした点を簡潔に書き出してくれないから出来たらで良いから
教える立場にいるので参考にしたい。
>>928 void CPropertyPage_04::OnKillfocusEdit2(){
CWnd* pFocus = GetFocus();
if(pFocus && pFocus->GetDlgCtrlID() == IDCANCEL || !IsWindowVisible() )
return;
・・・
}
こんな風に書くと i_cancel いらないかもね。
>>930 EN_CHANGE だと、-10 を入力しようとして - だけを
最初に入れただけで「数値を入れてください」て言われるので、
うっとうしいと思ったので、EN_CHANGEのとこは
SetModified(TRUE);
だけ入れることにしてるんです・・・・。変ですか?
>>935 ありがとうございます。キャンセルボタンでも
OnKillFocus をスルーして
キャンセルできるようになりました!!(ToT)
938 :
デフォルトの名無しさん :04/01/21 02:19
MFCで、ビューの中に子ウィンドウ(境界線がないのでユーザーからは存在がわからない) を作って、その中である大きさの四角形の、枠だけを描画したいのですが、 うまくいかないので教えてください。 子ウィンドウにWM_PAINTメッセージをマップして、 void CMyObject::OnPaint() { CPaintDC dc(this); dc.SelectStockObject(NULL_BRUSH); //透明のブラシ CPen pen(PS_SOLID,4,RGB(0,0,0)); //黒色で太さ4のペン dc.SelectObject(&pen); Rect cRect; this->GetClientRect(cRect); //子ウィンドウのクライアント領域 dc.Rectangle(cRect.left + 10, cRect.top + 10, cRect.right - 10, cRect.bottom - 10); } こんな感じにしてみたのですが、確かに四角形の枠は表示されるものの、 いくら太さを変更してみても、太さ1でしか描画されません。 RGB値をいくら変更しても黒でしか表示されませんでした。 このことから、SelectObject(&pen)が無視されていると思われるのですが・・・。 ちなみに、SelectObjectの直後に、dc.SelectStockObject(WHITE_PEN)を挿入すると、 きちんと色が変化します。う〜ん、なぜなんでしょうか。
>>934 勘違いした点というのは、教えていただいた結果925のソースを書いたのですが
931と比べて特に変わったところがないのでもう一度良く配列に入っている数値を
デバック中に観察したら、見てるところが違ったのです・・・。(ホントすみません
>>938 わかんないけど
CPen pen(PS_SOLID,4,RGB(0,0,0)); //黒色で太さ4のペン
CPen *ppenOld ;
ppenOld = dc.SelectObject(&pen);
Rect cRect;
this->GetClientRect(cRect); //子ウィンドウのクライアント領域
dc.Rectangle(cRect.left + 10, cRect.top + 10, cRect.right - 10, cRect.bottom - 10);
dc.SelectObject(ppenOld);
たんに説明のために省略しただけならスマソ
>>938 実際に全体をみてコンパイルしてみないと
わからないなぁ。ウインドウの属性が問題だったりする
場合もあるし・・・。
>>938 ちなみに、ダイアログのOnPaintで試しにやってみたらできたよ
実行環境とかは?
943 :
デフォルトの名無しさん :04/01/21 19:36
マイクからの音声入力はどうやればいいのでしょう? VC++のどの解説本にも書いてないので、 全く手がかりが無くて困っています。
944 :
デフォルトの名無しさん :04/01/21 19:53
.net2003でプログラムしてるんですが デバッガで実行すると必ず C:\Program Files\Yahoo!J\Messenger\idle.dll' を読み込みました。シンボルが読み込まれていません。 という身に覚えのないメッセージがでます。 なんか気持ちわるいんですが なにか問題があるんでしょうか?
そこで右フック
946 :
デフォルトの名無しさん :04/01/21 21:00
>>940 >>941 どうやら非常に単純なミスのようでした(泣)
実際のプログラムでは、
CPen pen(PS_SOLID,4,RGB(0,0,0)); //黒色で太さ4のペン
dc.SelectObject(&pen);
の部分がifブロックに入ってて、
条件分岐で黒か白のペンのどちらかを登録するようにしていたのですが、
ブロック内で宣言したCPenのオブジェクトがifブロックを抜けると、
破棄されることをすっかり忘れてしまったようです。
(if文まで含めると投稿文が長くなるので、適当に要約して書いたつもりでしたが、
肝心の問題部分まで改変してしまっていて、申し訳ありませんでした)
>>940 その作業も必要ですね。ご指摘ありがとうございます。
947 :
デフォルトの名無しさん :04/01/21 21:23
DLLを使うため、APIを使いたいのですが、 そのあたりの例かなにかを参考にしたいのですが どこかいいサイトを紹介していただけないでしょうか・・・?
948 :
デフォルトの名無しさん :04/01/21 22:25
どなたかツールチップのフォントを変える方法を知ってる方いらっしゃいませんか? 変えることは不可能なんでしょうか?
>>947 Win32APIなら「猫でもわかるプログラミング」あたりにいけば。
なんかこう、古いけど。
windows付属の電卓のようなものを練習でチャレンジしてるんですけど。 入力されたすうじを裏でおぼえさせておいて、表示は演算子が入った次の時は クリアされて新しく入力とか、、 結構思ったより色々やらなきゃいけないですね。 みなさんやるとしたらどんな感じの流れで作りますか?
951 :
デフォルトの名無しさん :04/01/21 23:40
>>949 ありがとうございます。いってみます^^
逆ポーランド電卓
どこに聞いていいか分からなかったのでここに質問させてください。 Visual Studio 6.0 Processor Pack に入っている サンプルプログラム (C:\Program Files\Microsoft Visual Studio\VC98\Samples\Amd\Isdk に入っている SIMD で演算する一連のライブラリ) を利用したいのですが、 このプログラムのライセンスはどうなっているのでしょうか。 クローズドな開発に利用していいのか、 逆にオープンソースにこのソースも含めて配布していいのか、 これを利用したソフトを販売していいのか(そんな予定はありませんが)、 等です。
質問です。 Win2ksp4、VS.net2002でダイアログベースのMFCアプリケーションを作成するときに ボタンを配置して、ダブルクリックで関数を追加すると 最初は追加されるのですが、2個目以降はMFCクラスウィザードへようこそ という窓が出て追加できません。イベントハンドラを追加しようとしても InternetExplorerスクリプトエラーという窓が出てしまいます。 エディットコントロールでは変数が追加できません。 一度VSを終了してから起動して、開くと今度は正常に動きます。 どうすればよいのか教えてください。お願いします。
質問なのですが、シリアル通信をしていて、comポートの 「CTS」のon/offって、どうやって見ればいいのでしょうか? よろしくお願いします。
956 :
デフォルトの名無しさん :04/01/22 20:58
1000も近いすけど、質問します。Visual C++ 6.0 Windows 2000 で インターネットプロトコルのプロパティに表示される項目 (自分のIPアドレス、DNS)を変更するプログラムはどうやればよいのでしょう。 実行ファイルをダブルクリックしてすぐIPの切り替えを行いたいのですが。。。 コマンドプロンプトで行う方法はわかったのですが、VCではどうやればよいのか…
なら、そのコマンドとパイプでもつないだらええやん。
959 :
デフォルトの名無しさん :04/01/22 21:54
パイプでつなぐ?何すかそれ?キーワードでも教えてください。
960 :
デフォルトの名無しさん :04/01/22 22:11
>959 ヒント dir | sort | がパイプ
961 :
デフォルトの名無しさん :04/01/22 22:25
そのパイプは知ってるっす。私が実現したいのはVCから行うってことをやりたいんです。
962 :
デフォルトの名無しさん :04/01/22 22:27
ん?VC上からコマンドプロンプト上のコマンドを起動できるってこと?
_popen
965 :
デフォルトの名無しさん :04/01/22 23:15
system()でできた。(^^ ありがとう。
966 :
デフォルトの名無しさん :04/01/22 23:59
約10秒おきに新しい一行が追加されていく CSVファイルがあります。 このCSVファイルをできるだけ高速に、 新規追加された行で、しかも望みの列だけとりだしたいのです。 どういうやりかたがはやいでしょうか。 C言語でSQLつかえるともきいたんですけど、やっぱ遅いですかね。
967 :
デフォルトの名無しさん :04/01/23 00:19
>966 固定長ならファイルの最後からファイルポインタを移動して ランダムアクセスして早く読めるけどそうでなければ難しそう。
>>966 インデックスファイルを同時に作っていくのが普通じゃない?
キー文字列と本体ファイルのファイルポインタをペアで記録していく。
そのインデックスのキー文字列をすばやく検索するためのデータ構造が、
リンクリストだのハッシュだのという例題として情報処理関連の試験に出てくると。
969 :
デフォルトの名無しさん :04/01/23 14:31
Win2000+VC6.0でWin32 Console Applicationを作るとき,メモリを静的に 確保できる限界はどれくらいなんでしょうか? 画像を配列に保存するため,unsigned char hoge[約45万]を3個作ったら, ビルドは出来た(警告も無し)ものの実行できませんでした. 3つ目の要素の数を10万くらいにしたらプログラムの実行は出来ました. この配列は3つとも同時に最初から最後まで使うのですが,解決策はありませんか?
970 :
デフォルトの名無しさん :04/01/23 15:06
Visual C++ .NET 2003 で、ファイルをインポートしてリソースを作成することができません。 「プロジェクト」→「リソースの追加」→「インポート」→「ファイル選択」→「カスタムリソースの種類」 →「種類を入力」→「OK」 で、ツリービューにリソースが追加されません。(でも変更を示す * は付きます) ツリービューを右クリックでも、新規作成でファイル名を直接入力でも、だめでした。 解決策はありますか?
971 :
デフォルトの名無しさん :04/01/23 15:29
ソースに #ifdef WINDOWS ... #endif #ifdef LINUX ... #endif のような プリプロセッサが沢山あるのですが、 ソースが読み難いので #ifdef LINUX の部分だけを表示させることは 可能なのでしょうか? (Microsoft Visual C++ 6.0 を 使用しています) 宜しくお願い致します。
LINUX定義して/Eとか/Pとか。
973 :
デフォルトの名無しさん :04/01/23 16:43
ファイルをクリックしたら、またテキストソフトで開けなくしたい。 つまりファイルロックのソフトを作りたいのですが、ロックの仕方が分かりません。 環境はWINDOWS2000SEVER,VISUALC++6.0です。 よろしくおねがいします。
>>972 すみません、全く説明がわかりません。
まず、その定義はどのようにできるのか?
次に /E, /P って何ですか? コマンドですか?
Visual C++ に関しては全くのド素人なので、
宜しくお願いいたします。
>>969 それはスタックサイズが足りないからだよ。(MSDNでコンパイラオプションの/F参照)
スタックサイズ増やしてもいいけど、動的確保した方がいいんでないの?
>>973 ::CreateFile ( ... , ... , 0 , ・・・)
>975 unifdef使え。 >976 CreateFileのdwShareMode引数で何も指定しなかったら、 他のアプリでは開けないだろ。
unifdef使え、は>974が対象でした。 ここでお詫びして訂正します。
979 :
デフォルトの名無しさん :04/01/23 21:16
VC6で ダイアログベースのアプリを作っている時 ClassViewからダイアログクラスが消えてしまうんですけど 対策とかあるんですか?
っと思ったら、ダイアログのヘッダーファイルいじってたら復活した。 どうなってるんだ?
>977 初心者なのでよく使い方が分からないもので・・・。
>>981 言い訳書く暇あったら、MSDN 百回見直せ。
>982 MSDN百回見直してもわからないものはわからない。
>>983 だったら向いてないと言うことだ。
素直にあきらめろ。
985 :
デフォルトの名無しさん :04/01/24 11:11
vcかcでiniファイルの書き換えしたいんですけど?
>>979-980 俺はそういうとき一度プロジェクトを閉じて、プロジェクト内の
*.ncb を消して開きなおしてるけど、他に直し方あるんかな。
988 :
デフォルトの名無しさん :04/01/24 11:46
文字列リソースの数に上限ってあるんでしょうか?
>>975 私も似たような感じで静的メモリとして
16MB確保してたんですが、
パソコンによって動いたり動かなかったりしました。
パソコンやOSによってスタックサイズが変わったりするのでしょうか?
また、同じ容量でも動的に確保したら上手く動くんでしょうか?
>>989 変わるし確保可能な容量を構内限り動く。
そこまで大きいメモリを連続して取るなら、 アッセンブラを多少勉強したほうがいい、 なぜ個体によって動いたり動かなかったり、 完全に動かすにはどうやるのかわかるよ。 どのレジスタにどの情報を入れるかはっきりと指定できるからな。 ただし、何メガもアッセンブラでやることは無いと思うが。 そもそも16Mや配列1マン取らないといけない設計自体に 疑問を感じる。 VCはただでさえ無駄にメモリ領域を消費している。 ヘッダや元からついてくるソースに入っていって使ってない機能を 削除するとか、いろいろ方法も考えられる。 VCはふつうのソフトの開発やデバッグややりやすいが、いったんデバイス(メモリ) で引っかかったら、永久に原因が究明できないのが大欠点。 機械制御、開発等には使われていないのが現状。
>>991 話がずれますが、大容量の画像等を扱う時は、
メモリを確保せずにどうやって扱うのでしょうか?
2048x2048xRGBA=16MB必要になってしまい、
これを丸ごとメモリに確保しています。
やはりこれは設計ミスでしょうか・・・・。
ふーん、よくそこまででっち上げたね。
>>992 メモリが16MB以上確保できる環境なら確保してもいいだろうが、
スタックには取るなよ。
処理の内容によっては一部分ずつ処理することでメモリを節約することも出来るし、
その方が速いかも知らんよ。
>機械制御、開発等には使われていないのが現状。 普通に使ってますが。
>>994 実行環境が今時の PC なら、16MB ぐらいどうってことないだろ。
下手に気取って、
> 処理の内容によっては一部分ずつ処理することでメモリを節約することも出来るし、
なんて事やる奴はヴァカ。
>>980 ヘッダに1文字でも変更加えると復活する
>>995 ファームとかの開発って意味ね。
>>バカとは言い切れん、そうやらないといけない状況だって
いくらでもあるよ。
>>998 そういう状況なら、そうやるしかないんだろ。
少なくとも、「その方が速いかも知らんよ。」なんて発言する奴は、やっぱりヴァカだよ。
1000 :
デフォルトの名無しさん :04/01/24 17:12
初めての1000get
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。