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


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

VisualC 相談室【8】
251 名前:232 :02/06/18 22:18
ちなみに個人コード、日付、時間1、時間2は構造体にしています。
typedef struct tagData
{
long lCode;//個人コード
long lDate;//日付
short nTime_1;//時間1
short nTime_2;//時間2
} Date;
こんな感じです。

252 名前:デフォルトの名無しさん :02/06/18 22:22
>>247
ますはそれぞれ構成する要素を別々の配列に格納しておいて、

個人コードをコンボボックスへ追加する際には既にコンボボックス内に同じデータが
あったらはねるって感じでいれてく。

日付は現在選択されている個人コードと一致するコードを配列内から検索して
一致したらその位置の日付を追加していく。

時間は現在選択されてる個人コードと日付データが一致した位置の時間データを
それぞれエディットボックスに表示してやる。

こんな感じかい?

253 名前:デフォルトの名無しさん :02/06/18 22:23
説明の下手さにイライラしてきた。寝る。

254 名前:232 :02/06/18 22:51
>>252
そのとおりです。
うまく説明していただいてありがとうございます。

日付をとってくるときって
GetWindowText()で個人コードをとってきてやればいいのでしょうか?
どうもわかりません。

255 名前:デフォルトの名無しさん :02/06/18 23:05
>>254
生API使いですか?
MFC使ったほうが楽じゃないですか?

256 名前:デフォルトの名無しさん :02/06/18 23:09
>>254
それで良いんじゃない?
それかコンボボックスへ登録したインデックス順に別の配列へ
IDそのものを入れておいても良いと思うけど。

257 名前:デフォルトの名無しさん :02/06/18 23:11
>>254
>>256の続き。

あとコンボボックスならGetCurSel()とGetLBText()でなんとかなるんじゃないかな。

258 名前:デフォルトの名無しさん :02/06/19 00:27
VC++でもプリンタ設定でもモード選択が多岐に渡る場合、凸の形をしたページ
が重なっているダイアログが出てきて凸の上の部分でページを選択させるよう
になっているが、あの様なプログラムをVC++で書く時はどうすればいいの?
一般に紹介されているダイアログだと単層構造のものしかできない。

259 名前:デフォルトの名無しさん :02/06/19 00:30
>>258
タブコントロール

260 名前:デフォルトの名無しさん :02/06/19 00:34
>>258
プロパティシート、プロパティページを調べれ

261 名前:258 :02/06/19 00:39
どうもです。助かりました。

262 名前:デフォルトの名無しさん :02/06/19 01:51
Win2000でメモリ書きかえるときってGetWindowThreadProcessIdと
OpenProcessとWrite/ReadProcessMemoryだけで可能ですか?


263 名前:デフォルトの名無しさん :02/06/19 01:52
マルチ死ね

264 名前:デフォルトの名無しさん :02/06/19 02:07
代入文だけで可能です

265 名前:デフォルトの名無しさん :02/06/21 11:31
あげ

266 名前:デフォルトの名無しさん :02/06/21 14:11
子ウインドウを作る方針でやろうとしたのですが、(↓のような方法で)
if( GetDescendantWindow(ID_CHILD1) == NULL ) {
CWnd* s_window = new CWnd;
pv_window -> Create( NULL, "子ウインドウ",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
CRect( p_left, p_top, p_right, p_bottom ), this, ID_CHILD1 );
CDC* smallDC;
samllDC = s_window-> GetDC();
・・
元のダイアログウインドウより大きくはできないですよね.
元のダイアログウインドウと無関係にぐりぐり移動させられるウインドウを生成する方法はどうやればいいんでしょう?

#あらかじめ作ってあるリソース(ダイアログウインドウ)を呼び出す関数などはあるんでしょうか?


267 名前:デフォルトの名無しさん :02/06/21 14:12
↑の変数名ひとつ間違えてます。
s_windowのところ。質問の本質ではないですが、一応。。

268 名前:デフォルトの名無しさん :02/06/21 21:27
>>266
リソースで作ってあるダイアログを表示したいなら
そのダイアログをCDialogに結び付けて表示元のウィンドウクラスで
そのダイアログのメンバ変数(例えばm_Dlg)作ってm_Dlg.ShowWindow( SW_SHOW )で
出るんじゃない?ダイアログクラスのコンストラクタでcreateする必要が
あったような無かったような・・・・。

269 名前:デフォルトの名無しさん :02/06/22 17:25
プログレスバーの中に “58%” などといった文字列を、一部の色を反転させて表示する場合、
どのようなインプリメントをするのがスマートなんでしょうか?

メモリDCに文字列を書いて BitBltで合成することで、それらしいものを作ってみましたが、
Codeguruなどを見てみると、クリッピングリージョンを駆使したものが紹介されていました。

BitBltのパフォーマンスは環境に大きく左右され、負荷も大きいと聞いたんで、やっぱ
クリッピングリージョンを使った方一般的なんでしょうか...?

270 名前:デフォルトの名無しさん :02/06/22 17:38
>負荷も大きいと聞いたんで
いつの時代の話だ(ワラ

271 名前:デフォルトの名無しさん :02/06/24 14:07
>>268
ダイアログのメンバ変数を作る方法がわからないんですが..

272 名前:デフォルトの名無しさん :02/06/24 21:10
>>271
リソースエディタでダイアログ作ってそのダイアログを右クリックしてクラスウィザードで
CDialogに結び付けてあげる。

273 名前:デフォルトの名無しさん :02/06/24 22:45
Visual c++.Net使ってて、アイコンリソースを追加(インポート)したいのですが、なんだかうまくいきません。
(リソースの追加をしても何にも起こりません。)
VCの右側のリソースビューのところには、(赤い×印つきで)ほかのエディタで開く、という奇妙なものが表示されています。
しかも、クリックしても何にも起こりません。
今のところ、リソーススクリプトをメモ帳なりで編集して無理やりインポートしているのですが、どうしたらいいのでしょう?
あと、これ関連でアイコンリソースのリソースIDが変更できません。
これまた、どうしたらいいでしょう?

274 名前:デフォルトの名無しさん :02/06/24 23:57
>>273
VC6しか知らないのだが、リソースビューのツリーのアイコンのところを右クリックできない?

275 名前:273 :02/06/25 00:11
>>274
そう、今までVC6使ってたから、そのつもりでやったら、できんのよ。
誰か、情報キボンヌ。

276 名前:デフォルトの名無しさん :02/06/25 01:33
DLLエクスポートの序数を自分で管理するには
普通DEFファイルを用いると思うんですが
あるVC++のプロジェクトでは、DEFファイルが無いのに
序数を任意の数にしているみたいなんです。
何かやり方があるんでしょうか?

277 名前:デフォルトの名無しさん :02/06/25 02:06
>>276
リンカの/EXPORTオプション?

278 名前:276 :02/06/25 04:40
>>277
ごめんなさい、
自分の勘違いでした。

279 名前:デフォルトの名無しさん :02/06/25 10:43
IEにGoogleツールバーのようなものを取り付けるプログラムを
作成したいのだが、サンプル載ってるページはありませんか?

280 名前:デフォルトの名無しさん :02/06/25 12:50
>>279
Googleで検索すれば見つかります。

281 名前:デフォルトの名無しさん :02/06/25 21:28
#pragma pack( [ [ { push | pop}, ] [ identifier, ] ] [ n] )

これの意味が理解できずにMSDNライブラリで調べてみたところ、

>この構文を使うと、プログラムの別の構成要素が pack プラグマでパッキングした
>別の配置を指定しているときに、プログラムの構成要素を単一の翻訳単位にまとめることができます。
>push を使うと、その時点のパッキングの値が記憶されます。

この場合、パッキングというのは、ある構造体などをnバイトに収めるように
するということなのでしょうか?

282 名前:70 :02/06/25 22:18
>>281
とりあえず...
> #pragma pack(n) を使い、n に 1、2、4、8、16 を指定すると、構造
> 体の 2 番目以降のメンバはメンバの型のサイズと n バイト境界の小さ
> な方に置かれます。
だけ覚えておけばいい。あとの構文は必要なった時に使えばいい。

それでもわからなければ「パディング」とか「アライメント」とかの言葉
をぐぐってみそ。

それでもわからなければ、まだ pack なんて必要ないんだよ。無視しとき
な。

283 名前:デフォルトの名無しさん :02/06/25 22:31
>>281
お前には移植考慮無しのpack(1)がお似合いだ。

284 名前:デフォルトの名無しさん :02/06/27 17:51
ドラッグでエリアを選択するような機能を作っていますが、
void CPainDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if(nFlags == MK_LBUTTON)
{
CClientDC DC(this);
DC.SelectStockObject(NULL_BRUSH);
DC.Rectangle(m_from.x,m_from.y,point.x,point.y);
・・・
こんなかんじで、マウスのドラッグに合わせて長方形を描画してるんですが、
これだと、通過した位置まで全部に長方形が描かれてしまいます。
あくまでプレビューで長方形の位置を見ながらそこには描かず、最終的にOnLButtonUpした地点までの長方形のみを描きたいのですが、どうすればよいのでしょうか?

中を塗りつぶすというのは下の絵が消えてしまうので無しです。

285 名前:デフォルトの名無しさん :02/06/27 17:55
>>284
DrawFocusRect

286 名前:厨房 :02/06/27 18:00
C言語をフリーのソフトでコンパイルするのない?

287 名前:デフォルトの名無しさん :02/06/27 18:01
>>286
gccで検索しろ。

288 名前:デフォルトの名無しさん :02/06/27 18:11
スタックを使わずに逆ポーランド電卓作りたいんですが
switchやfor程度で作れる単純なソースお願いできないですか?
ちなみに自分で作ってみたら、
#include<stdio.h>
#include<stdlib.h>

int main()
{
char data[100];
int suuji = 0;

printf("逆ポーランド記法による計算をします\n");
printf("\n");
printf("計算したい数字を入力してください->");

scanf("%s", data[suuji]);

switch(data[suuji])
{
default:
break;
case '+':
data[suuji] = data[suuji] + data[suuji];
break;
case '-':
data[suuji] = data[suuji] - data[suuji];
break;
case '*':
data[suuji] = data[suuji] * data[suuji];
break;
case '/':
data[suuji] = data[suuji] / data[suuji];
break;
}

suuji = atoi(data);

printf("\n");
printf("合計は%dです\n", data[suuji]);

return 0;
}
余裕でエラーでした。

289 名前:284 :02/06/27 18:29
>>285さんありがとうございました!!できそうです。
で、move内で以下のようにしていますが、
・・・
SetRect( move_rect, m_from.x, m_from.y, point.x, point.y );//新しい位置情報を取得
CClientDC DC(this);
DC.SelectStockObject( NULL_BRUSH );

DC.DrawFocusRect( move_rect_last );//前回の場所に描画指示して消す!
DC.DrawFocusRect( move_rect );//新しいのを描画
SetRect( move_rect_last, m_from.x, m_from.y, point.x, point.y );前回の位置情報を記憶
・・・
DrawFocusRectは同じ位置にもう一度描画すれば消せるとのことで、やってみているんですが、消えないんです。
どこがおかしいのでしょうか?

290 名前:デフォルトの名無しさん :02/06/27 18:50
>>288
まず、スタックを使わない理由を聞かせてくれまいか。

291 名前:デフォルトの名無しさん :02/06/27 18:57
>>290さん
簡単に言うとスタックがまだわからないからです・・・
色々調べてみてスタック使えばすぐにできるようなんですが
範囲外なので不必要なんです。
で、かわりの配列でなんとかしたいわけです。

292 名前:デフォルトの名無しさん :02/06/27 19:10
配列をスタックとして扱っているだけでわ・・

数値をdataに積んでいるでねーし、
演算子も、スタックから取り出しているわけでもねーし、、

293 名前:デフォルトの名無しさん :02/06/27 19:13
>>288
感動的なまでに無茶苦茶ですね・・・
スタック以前に基礎からやり直したほうがよくないですか?

294 名前:デフォルトの名無しさん :02/06/27 19:22
基礎からというよりその基礎を今やってる最中なんですが・・・

295 名前:デフォルトの名無しさん :02/06/27 19:26
>>294
勘で書かずにわからない部分やあやしい部分は参考書を見て書きましょう。

296 名前:284 :02/06/27 19:28
|_・)ソォーッ
>>289はいかがなものでしょう?

297 名前:デフォルトの名無しさん :02/06/27 19:32
>>296
後は自力で

298 名前:284 :02/06/27 19:34
ヒー

299 名前:288 :02/06/27 19:35
その通りですね・・・
グラフィック専攻なので1冊も参考書買ってませんでした。
明日にでも買って見てみようかと思います。

300 名前:デフォルトの名無しさん :02/06/27 21:45
CDC* pDC=p->GetDC();
CRect r; //ピクチャの領域サイズをrに取得
p->GetClientRect(&r);//ピクチャの領域サイズをrに取得
とした場合、
r.leftとr.top
は常に0ということなんでしょうか??
 /(0 , 0)
┏━━━━━━━━ウインドウ━━━┓
┃   /(r.lft , r.top)
┃  ┌──────────┐
┃  │     ピクチャエリア 
┃  │
┃  │ですよね?で、r.left=0だとすると、
┃  │
 ←→ この部分
ピクチャエリアの始点の間隔はどのようにあらわされるのでしょう?

301 名前:デフォルトの名無しさん :02/06/27 23:20
今度シリアル受信専用のアプリケーションを作る予定なのですが、
相手側が不定期に送信してくる場合、受信側ではタイマなどで定期的に
受信するようなスレッドを常に起動しておくような形で良いんでしょうか?
またその場合送信データを受信バッファで受け取った際、
[STX]データ[ETX][STX]データの途中・・・ ← ここまでしか取れないような
状況になりそうな気がするのですが、その場合データの成形は
アプリケーション側でやってあげなければいけないんでしょうか?

302 名前:デフォルトの名無しさん :02/06/27 23:25
大麻などで定期的に受信っていうか
スレッドでずっと受信用にreadfileで待っておく。そんでなんか受信したらどっかにバッファリングして
メッセージで本スレッドに通知してまたすぐreadfile。そういうずっとreadfileするスレッドをつくっておきます。


303 名前:デフォルトの名無しさん :02/06/27 23:30
>>302
成る程ですね。
要は受信割り込みの代わりをスレッドにやらせるって感じですか。
ありがとうございました、やってみます。

304 名前:デフォルトの名無しさん :02/06/27 23:33
あ、聞き忘れましたが、

[STX]データ[ETX][STX]データの途中・・・ ← ここまでしか取れないような
状況になりそうな気がするのですが、その場合データの成形は
アプリケーション側でやってあげなければいけないんでしょうか?

これに関してはどういった感じでしょうか?

305 名前:デフォルトの名無しさん :02/06/27 23:39
>[STX]データ[ETX][STX]データの途中・・・ ← ここまでしか取れないような
>状況になりそうな気がするのですが、その場合データの成形は

ええ。なりますよ。

短時間ならスレッドで処理してもいいし、
アプリの方で電文として完結するところで切り出しても良いんじゃないですか?


306 名前:デフォルトの名無しさん :02/06/27 23:46
>>300
GetClientRect(&r1); ClientToScreen(&r1); GetWindowRect(&r2);
とでもして、r1とr2の差分を取ってみ。
あと、変な言葉を発明せずに素直にクライアント領域と呼べ。

>>289
move_rect_leftをメンバ変数かstatic変数にしる。

307 名前:デフォルトの名無しさん :02/06/27 23:48
>>305
やはりなりますか・・・わかりました。
ありがとうございます。色々聞いてしまって申し訳ありませんでした。

308 名前:306 :02/06/27 23:50
>300
考えてみりゃ GetWindowRect(&r1); で十分だな。
>289
move_rect_last の間違いだな。
>306
もう寝な。

309 名前:デフォルトの名無しさん :02/06/28 02:11
すみません、うまく伝わらなかったみたいです。
┏(0,0)←スクリーン座標で━━スクリーン(モニター)━━━━┓

┃   /(0 , 0)←クライアント座標において
┃  ┏━━━━━━━━ウインドウ━━━┓
┃  ┃   /(r.lft , r.top)
┃  ┃  ┌──────────┐
┃  ┃  │     ピクチャエリア 
┃  ┃  │
┃  ┃  │クライアント座標から見たピクチャの始点座標の位置を
┃  ┃  │ 知りたかったわけです。
     ←→ この部分
という意味でした。

310 名前:デフォルトの名無しさん :02/06/28 02:18
>>309
やっぱりよくわからん。ピクチャエリアって何?
クライアント領域のことを言ってるなら>>306だし、
ウィンドウに貼りつけたコントロールなら>>308
いずれにせよ、両方ともスクリーン座標に直して
引き算すりゃ答えは出るだろ。

311 名前:デフォルトの名無しさん :02/06/28 02:28
+−−−−−−−−−−−−−−−−+
|myapli.exe             _□×|
+−−−−−−−−−−−−−−−−+
|ファイル 編集 ・・・             |
+−−−−−−−−−−−−−−−−+
|                        |
|                        |
|                        |←クライアントエリア
|                        |
|                        |
+−−−−−−−−−−−−−−−−+


312 名前:デフォルトの名無しさん :02/06/28 03:06
>>310
ピクチャエリアと書いているものは、
CWnd* h = GetDlgItem( IDC_PICT1 ) ;//ピクチャ1
CDC* pDC = h -> GetDC() ;
CRect rect_pict1 ; //ピクチャの領域サイズをrect_pict1に取得
などという場合のピクチャのことなんです。
ここで、目的は、
【マウスをクリックした位置が、ピクチャ1のどの位置であるかを取得したい。】ということだったんですが、

この場合、マウスの位置は、
void CPainDlg::OnLButtonDown(UINT nFlags, CPoint point)
の中で、( point.x, point.y )によって取得すると、クライアント領域からの位置になっていて、
それがピクチャのどのぐらいの位置?というのを知るために、
クライアント内でのピクチャの左端の座標、 =(つまり上図の差分部分)
を知る必要があったんです。


313 名前:デフォルトの名無しさん :02/06/28 08:39
>>312
んだからGetWindowRectとかで何とかすればよいのではないのか。

314 名前:デフォルトの名無しさん :02/06/28 17:16
VC++でASSERTを使うときに,しなくてはけない事を教えてください(ヘッダーをインクルードするとか)。

315 名前:デフォルトの名無しさん :02/06/28 19:44
CRTDBG.H?
_ASSERT と、アンダーバーが必要。

316 名前:デフォルトの名無しさん :02/06/28 23:10
>>312
ClientToScreen(&point);
GetDlgItem(IDC_HOGE)->ScreenToClient(&point);

317 名前:デフォルトの名無しさん :02/06/29 00:53
Aと言うクラスからBというクラス内のマルチスレッド用関数をスレッド起動する事は可能ですか?
実行すると一応動くのですがスレッド終了時にメモリリークがなんたら〜といったメッセージが
アウトプットに表示されてしまいます。原因としては何が考えられるでしょうか?

318 名前:デフォルトの名無しさん :02/06/29 00:57
メモリリークがなんたら〜 が起きているから。

319 名前:デフォルトの名無しさん :02/06/29 01:24
A::func()
{
B.beginethread();
}
ですか?

320 名前:デフォルトの名無しさん :02/06/29 02:45
プログラム初心者なんですが
クラスのオブジェクトを必要に応じて順次作っていくにはどうすればいいのでしょうか?


321 名前:デフォルトの名無しさん :02/06/29 02:48
newしてください。

322 名前:デフォルトの名無しさん :02/06/29 04:29
Windows2000Sp2+VisualC++6.0で、
ATLCOMウィザードで空のプロジェクトを作って
コンパイルするとTLBファイルが生成されます。
それをOLE/COMオブジェクトビューアで見ると
アクセス違反でプロセスが落ちるんですよ。
元からある他のTLBだと大丈夫です。
何が問題なんでしょうか?
レジストリが壊れてとか?

323 名前:デフォルトの名無しさん :02/06/29 06:01
>>322
> アクセス違反でプロセスが落ちるんですよ。
> 何が問題なんでしょうか?
アクセス違反だろ。


324 名前:323 :02/06/29 07:02
意地悪言わないでよ。
つーかレジストリが怪しいよな、やっぱ。
は〜再インストはイヤだぁ〜。

325 名前:デフォルトの名無しさん :02/06/29 12:50
>>319
A:Func
{
B myB;

AfxBeginThread( myB::Func, &myB, THREAD_PRIORITY_NORMAL );
}

って感じです。

326 名前:デフォルトの名無しさん :02/06/29 12:57
>>325
それじゃA::Funcを抜ける時にmyBがあぼーんされる。
newで作ってどっかに大事にしまっておけ。

327 名前:デフォルトの名無しさん :02/06/29 13:06
>>326
ああすいません、間違えました(汗

B myB;

はAのヘッダにメンバ変数として登録してあります。

328 名前:デフォルトの名無しさん :02/06/29 14:14
クラスのメンバ関数をスレッド関数にして問題があるかどうかわからないが
普通はスレッドは普通の関数にすると思う。



329 名前:デフォルトの名無しさん :02/06/29 14:20
同じクラスの他のオブジェクトのメンバをメンバ関数で使いたいときは
どうすればいいですか?


330 名前:デフォルトの名無しさん :02/06/29 14:29
CFoo a,b;

aのメソッドでbのデータメンバを変更するって事ですか?

331 名前:デフォルトの名無しさん :02/06/29 15:03
CFooというのがわかりませんが
そんな感じです

332 名前:デフォルトの名無しさん :02/06/29 16:47
class CFoo{
    func(CFoo *p){
        p->・・・    //←ここで好きなように使う
    }    
}

main()
{
    CFoo a,b;
    
    a.func(&b);
}
とか。

333 名前:デフォルトの名無しさん :02/06/29 17:57
C#を購入しました。
64MBのメモリでは厳しそうなのでバルクの128MBメモリも購入しました。
PCにメモリを挿したのに認識しません。
それどころか起動しません。
メモリの規格はあっています。(多分)
バルクってのがマズかったですかね?

とりあえず64MBのメモリで諦めます。
メモリ不足でPCが逝ったら僕も逝きます。


334 名前:デフォルトの名無しさん :02/06/29 18:28
ふーん

335 名前:デフォルトの名無しさん :02/06/29 18:35
>>333
つーか強引にVCに話を繋げるなよ・・・・・・(w

336 名前:デフォルトの名無しさん :02/06/29 18:49
>>332
なるほど、ポインタを使うんですか
ありがとうございます


337 名前:デフォルトの名無しさん :02/06/29 19:02
>>332
・・・はメンバ関数でも大丈夫でしょうか?

338 名前:デフォルトの名無しさん :02/06/29 19:26
>337
パブリックなメンバなら関数でもデータでもダイジョウブだけど。
ちなみに設計としてはかなりヤバイでしょ。こういうのをチカラワザと言います。


339 名前:デフォルトの名無しさん :02/06/29 20:04
C#でウィンドウ表示するだけのプログラムを作ったんですが
それだけで100MB以上のメモリを消費しています。
(VisualStdio + 作ったプログラム)

死ぬほど遅いです。
マジで逝きそうです。
何とかしてください。

ところでC#って.Netのプログラムしか作れないんですか?
普通のプログラム作るにはVC6.0を使えってことですか?


340 名前:デフォルトの名無しさん :02/06/29 20:21
メモリを増設して、CPUを強化すればいいじゃん。

341 名前:デフォルトの名無しさん :02/06/29 20:51
C#スレ行け

342 名前:デフォルトの名無しさん :02/06/29 23:42
CでHello, World表示するだけのプログラムがでかすぎるって
大昔に叫んでたやつがいたな。


343 名前:デフォルトの名無しさん :02/06/30 00:42
>>338
なるほど、、、いまクラスの勉強しようとおもって
行列のクラスをつくってるんですよ(死ぬほど適当ですが)
そこで行列同士の掛け算をするときにオブジェクトをオブジェクトで呼び出せたらと思ったんですが
そういう関数はメンバにしないほうがいいのでしょうか、、、


344 名前:デフォルトの名無しさん :02/06/30 01:25
>>343
スレ違いやね。このスレじゃなくて、C++相談室で取り扱う話題だ。
まあ姉妹スレのよしみで答えてやるけど、掛け算をやりたいんなら、
その行列クラス用のoperator*()をオーバーロードするのが定石。
誰からも認められる、operator*()の正当なオーバーロードのやり方は、
Effective C++ と More Effective C++ を買って読めば分かる。買え。

345 名前:  :02/06/30 02:14
>>344
ここはVC専門すれだったのですか、、、いま気づきました、、申し訳ない

、、、なるほど、そういうことやるのに適したのがあるのですか
今度見てみます



346 名前:デフォルトの名無しさん :02/06/30 17:44
配布されているDLLを利用したWinコンソールアプリをVC++で作っています。
DLLのAPIが、呼ぶたびにstdoutに文字を吐きまくってうざったく、
それを黙らせたいのですがつまってしまいました。。

APIを呼ぶ時だけstdoutをコンソール以外(できれば"nul")につないで、
処理が戻ってきた時(自分がメッセージを吐きたい時)にstdoutとコンソールを
つなげなおせばよいかなと考えました。
とりあえずfreopenを使ってstdoutを別ファイルにつないでみたのですが、、
stdoutをコンソールにつなぎ直す方法がわかりませんでした。(苦笑

「自分のメッセージはstderrに出力」以外にうまい方法はありませんか?

347 名前:デフォルトの名無しさん :02/06/30 19:27
kage.dll方式で、Console系APIを
つぶしてしまえ。

348 名前:デフォルトの名無しさん :02/06/30 20:19
>>347
kage.dllって2ちゃんねるブラウザのやつですよね。
でも調べてみてもコンソール関係の情報を見つけられませんでした。。
申し訳ないのですけど、ぐぐる用キーワードかURLあたりだけでも教えて頂けませんか?

349 名前:デフォルトの名無しさん :02/07/01 21:24
アプリ終了時にAafxBeginThread()等で起動したマルチスレッドを終了させたい場合は
特になにもしなくてもいいんでしょうか?たまにkernel32でエラーが起こりましたといった
メッセージが表示されたりするんですが別の問題ですか?

350 名前:デフォルトの名無しさん :02/07/01 21:31
WaitFor*Object(s)で待機せよ

351 名前:デフォルトの名無しさん :02/07/01 21:34
>>346
GetStdHandleで保存
SetStdHandleでNULLでどうだ?

352 名前:デフォルトの名無しさん :02/07/01 21:41
>349
スレッド自信がループから抜け、関数としてリターンさせる。
そのためにはメインスレッドからイベントオブジェクトをシグナルさせてやる。
スレッド側は>350の言うような方法で終了イベントやその他のイベントを待つことができる


353 名前:デフォルトの名無しさん :02/07/01 22:00
>>350
>>352
なるほど、ありがとうございます・・・と言いたい所なんですが正直難しそうですね(^^;
今HELPを見てみたんですが良くわかりませんでした。
それっぽい説明のあるHPなどがありましたら教えていただけませんか?

354 名前:デフォルトの名無しさん :02/07/01 22:07
スレッドに終了イベント(volatileのフラグでもイベントでも)を送って、
受け取ったスレッドは自殺。

んで、メインスレッドでシグナル状態になるまで待機
(スレッドハンドルにWaitForSingleObjectとか)

355 名前:デフォルトの名無しさん :02/07/01 22:11
MSDNのサンプルmtrecalc
http://msdn.microsoft.com/code/default.asp?URL=/code/sample.asp?url=/MSDN-FILES/026/001/503/msdncompositedoc.xml

356 名前:kaz :02/07/02 12:54
はじめまして、VCの初心者なんですが、プッシュボタンやコンボボックスをプログラムの
起動中に無効化(グレーアウト)にするにはどうしたらいいでしょうか??
MSDN探してても見つからなくて・・・

357 名前:デフォルトの名無しさん :02/07/02 13:43
6.0ならリソースエディタで対象のボタンなどの
コントロール上で右クリック->プロパティで
無効化、みたいなチェックボックスなかったっけ?
ちょっと記憶があいまい。。

またはEnableWindow()かな。

358 名前:kaz :02/07/02 16:02
ありがとうございます!!ですけど、EnableWindowで普通の無効化はうまくいきそうですが、
ボタンを押されて処理の途中、ボタンを使い手に触らせないという意味での無効化は
どうやらできないようです.
ボタンが押されて、OnButton関数が始まります。OnButtonの最初で無効化を使用します。
それからOnButton内で処理が始まります.処理には待機中の状態があって、ボタンの見た目
は無効化されていても、待機中の状態の時に無効化されているボタンをさわるとまた処理後、
最初から処理を開始してしまうのです.どうにかならないでしょうか??

359 名前:デフォルトの名無しさん :02/07/02 16:06
>>358
PeekMessage()調べてみてYO!


360 名前:デフォルトの名無しさん :02/07/02 17:04
>>359 VB厨どっかいけ >>358 BeginWaitCursor, EndWaitCursor あたりをキーに探せ。 MFCつかってるならCWaitCursor でもいいけどね。

361 名前:359 :02/07/02 17:24
>>360
VB使ったことないのに・・・(´・ω・`)トホホ

BeginWaitCursor()(EnableWindow()でも良いけど)を呼び出す前に
さらにイベントがPOSTされたらどうすれば良いでしょうか?
ボタンを連射した時とかね。
BeginWaitCursor()が呼び出されるまで「絶対に」POSTされないって
言い切れる?


362 名前:デフォルトの名無しさん :02/07/02 20:04
やれるもんならやってみろ。

peekmessage自前でするアプリでおかしな動きをしないのは見たことないが。

スワップがりがりのノートや異常に重いアプリを動かしてるような環境なら
二度ポストされるかもね。
そのときは、二度処理するのがイベント駆動アプリとしては正しい姿だろう。



363 名前:kaz :02/07/02 20:15
みなさん、いろいろアドバイスありがとうございます!!
とりあえず、いろいろ勉強してみて試してみます。また問題があれば
また、後ほど、、

364 名前:359 :02/07/02 20:30
>>362
>やれるもんならやってみろ。
よくやってますが。

>peekmessage自前でするアプリでおかしな動きをしないのは見たことないが。
ハァ?何でおかしくなるの?普通のAPIだよ?
メッセージキューを扱うのが特別だと思ってるの?
CでAPIのみ使ってプログラミングしたことある?

>そのときは、二度処理するのがイベント駆動アプリとしては正しい姿だろう。
マジデスカッ!! 前提覆すなよっ!
・・・あんたがプロのプログラマじゃなかったら許す。



365 名前:デフォルトの名無しさん :02/07/02 20:39
Aと言うプロジェクトで作ったMFCからの(コントロール)派生クラスを、
新しく作ったBのプロジェクトで使おうと思ったのですが、ダイアログエディタで
ダイアログへコントロールを置いてそのコントロールをクラスウィザードで
メンバ変数に結び付けようかと思ったらそのクラスが選択できませんでした。
クラスビューではクラスとして認識されているのですが何か他にやらなければ
ならない事があるのでしょうか?

366 名前:デフォルトの名無しさん :02/07/02 23:46
スピンボタン付きのエディットボックスで,
m_spn3.SetRange(2000,2020);
m_spn3.SetPos(2002);
のように西暦を指定しているのですが,
どうしても2,002と表示され,2扱いになります.
このような症例に覚えのある方はいらっしゃいますか?
ちなみに,エディットボックスの定義で,
CほげDlg::CほげDlg(CWnd* pParent /*=NULL*/)
: CDialog(CほげDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyadDlg)
m_edit1 = _T("");
m_val1 = 0;
m_edit2 = _T("2002");
・・・のようにしていますが,,,
これが原因??でもなんで2,000なんてなるんだろう...たすけてください.

367 名前:デフォルトの名無しさん :02/07/02 23:53
>>366
スピンのスタイルをみれ。

368 名前:デフォルトの名無しさん :02/07/03 01:28
>>362
(゜д゜;)ポカーン・・・

369 名前:デフォルトの名無しさん :02/07/03 01:34
WindowsXP VisualC++6.0professionalです。
ファイルをコンパイルすると以下のようなエラーが出てしまいました。
error LNK2001: 外部シンボル "__CrtDbgReport" は未解決です
fatal error LNK1120: 外部参照 1 が未解決です。
色々コメントアウトしたりしてifstreamの部分が問題だということが
分かったのですが、なにかおかしなところがあるのでしょうか?。

std::ifstream in_file(path, std::ios::in|std::ios::binary);
// open失敗
if(in_file.bad()) return false;
//ファイル形式のチェック
char identifer[3];
in_file.read(identifer, 3);
if(strcmp(buffer, identifer) != 0)
eturn false;
in_file.close();
// close失敗
if(in_file.bad()) return false;
return true;

またios::nocreateをこのように入れようとすると
>std::ifstream in_file(path, std::ios::in|std::ios::binary|std::ios::nocreate);
error C2039: 'nocreate' : 'basic_ios<char,struct std::char_traits<char> >' のメンバではありません。
となってしまいます。何かおかしな部分があるのでしょうか?
ios::inとios::binaryは全く問題無いようです。
どうかよろしくお願いします。

370 名前:デフォルトの名無しさん :02/07/03 01:42
TVITEMのpszTextメンバはconstじゃないんですが、
一時変数やconst文字列をキャストして渡すのはダメなんでしょうか?

MSDNには編集されると書いてあるようなのですが、
スタック変数を渡しても文字列が破損される気配がないので、
内部でコピーが作成されているのかなと思うのですが。

実際のところ、どうなのでしょうか?

371 名前:デフォルトの名無しさん :02/07/03 01:50
>>370
SetするのもGetするのも同じ構造体を使う都合上、非constになっているだけと思われ。
漏れはいつもconst_castして突っ込んでいるけど、心配ならコピーして渡すよろし。

372 名前:デフォルトの名無しさん :02/07/03 17:09
>>367
ありがとうございました.解決しました!!
どうしてあんな機能がデフォルトでついてるのかと思いました..

373 名前:デフォルトの名無しさん :02/07/03 17:50
>どうしてあんな機能がデフォルトでついてるのかと思いました..
それがMSぢゃないですか・・と言ってみるテスト

374 名前:デフォルトの名無しさん :02/07/03 18:23
すみません,
GetTotalSecondsの逆を教えていただけますか?

CTime→ GetTotalSeconds → 総秒
総秒 → [    ?     ] →CTime

375 名前:デフォルトの名無しさん :02/07/03 18:26
>>374
GetTotalSeconds()って、CTimeSpanのメンバ関数やん。

376 名前:374 :02/07/03 18:33
>>375
そうですね,でもCtimeから差を求めて,CTimeSpanに代入して,
CTime tm1;
CTimeSpan tsp1;
long ttm;
tts = tsp1.GetTotalSeconds(); //で総秒をゲットできる
のように総秒数を求めることができますよね??
この逆に,
long time_sum;//秒数
などから,
Ctime tm2;とかに変換する方法はありますか?


377 名前:デフォルトの名無しさん :02/07/03 18:46
>>376
CTime( time_t time );
コンストラクタに↑こんなのがあるから、time_sumをそのままぶち込めばOKなんじゃない?
1970年1月1日を基点にした時刻になるよ。

(「時間の間隔」を「時刻」に変換するってのがよく分からんけど)


378 名前:デフォルトの名無しさん :02/07/03 18:47
>>376
値を入れるだけなら普通に代入できるけど、
CTimeは
「0時間0分0秒」から始まってるわけじゃない。

379 名前:あい :02/07/03 18:49
携帯のデータを破壊するウイルスさがしてます。


380 名前:533 :02/07/03 21:12
教えてください。
Explorerの右クリックメニューに項目を追加し、処理を割り当てたいのですが
やり方が分かりません。

HKEY_CLASS_ROOT\*\shellで別アプリを起動するしか無いのでしょうか?
これしか方法が無いとした場合、モーダル起動?(モーダルダイアログ表示時の
親子関係の様な物)は可能でしょうか?

具体的には、Explorerでファイルの右クリックメニューに「メモ帳で編集」的な
項目を追加し、そのメモ帳が終了するまで起動元のExplorerを操作できなくしたい。
と考えています。(実際は「メモ帳」部分が独自処理になります)

分かりにくくて申し訳ありませんがよろしくお願いします。



381 名前:デフォルトの名無しさん :02/07/03 21:24
Visual C++で使える正規表現ライブラリに心当たりありませんか?
GNUのやつをコンパイルしようとしてもうまくいかないのです....

382 名前:デフォルトの名無しさん :02/07/03 21:37
rubyとか、perとか、Pythonとかのを流用すればいいやん。

383 名前:デフォルトの名無しさん :02/07/03 21:40
>>381
boostのregex。
http://www.boost.org/
使い方。
http://www.s34.co.jp/cpptechdoc/article/regexpp/


384 名前:374 :02/07/03 23:12
現在求めていることは,
CTime jikan1(2000, 1, 1, 12, 0, 0);
で,2000年01月01日12時00分00秒に設定したとして,
2000年01月01日12時00分00秒から300000秒後の日付を知りたいということなんです.

ctime()を使うとすると,
struct tm *jikan2;という形ですよね?

そもそもどうして
CTime jikan1(2000, 1, 1, 12, 0, 0);
struct tm *jikan2;
などを時間を計算する複数の方法があるのが意味がわかりません.これらは互換性はないんでしょうか?

385 名前:デフォルトの名無しさん :02/07/03 23:16
>>384
プログラミング暦何日(または何時間)くらいですか?

386 名前:374 :02/07/03 23:37
>>385
( ゚д゚)ポカーン

387 名前:デフォルトの名無しさん :02/07/03 23:39
>>384
ヘルプでCTimeのところを読んでみなよ。
時刻に時間を足せるって書いてあるじゃん。

388 名前:デフォルトの名無しさん :02/07/03 23:41
>>386
> などを時間を計算する複数の方法があるのが意味がわかりません.

この発言はそう思われても仕方ないと思われ

389 名前:デフォルトの名無しさん :02/07/03 23:42
>>384
jikan += CTimeSpan( 0, 0, 0, 30000 )

390 名前:374 :02/07/03 23:55
みなさんありがとうございます.
弱冠プログラム暦3ヶ月の新まいでう.
ご回答ありがとうございました.

391 名前:デフォルトの名無しさん :02/07/04 00:10
>>381
http://www.hi-ho.ne.jp/babaq/bregexp.html

392 名前:デフォルトの名無しさん :02/07/04 01:09
やむを得ない事情から、とあるdll内にあるコールバック関数を使っています。

ところが、この呼ばれたコールバック関数から、クライアント側の関数や変数を
操作しなければならないという、いかんともしがたい窮地に追い込まれています(´Д⊂

dllのソースはあるのですが、大幅な変更をしてはいけないという…。
なにか良い知恵がありましたら、どうかお授け下さいませ…。

393 名前:デフォルトの名無しさん :02/07/04 01:12
>>392
たしか、DLLとEXEで共通の変数にアクセスする方法はあるよ。
おれは、もう寝なきゃならないから、がんばって検索してください。

394 名前:デフォルトの名無しさん :02/07/04 01:20
>>392
グローバル変数のようにアクセスする方法は知らないので
EXE内の関数を呼んで変数のアドレスをゲットしよう!
と言っておく

395 名前:392 :02/07/04 01:33
お二人とも、さっそくのレスありがとうございます(*´Д`)
>>393
#pragma data_seg(".shared")
やや、これですね!やた、変数はどうにかなりそうです。
>>394
えっとえっと…dllからexeの関数を呼ぶ方法が……。
393さんの方法を使うとしても、関数などのポインタを直接渡すのは、
アドレス空間が違うから無意味ですよね…。クライアントのウィンドウハンドルだけ
共有して、SetWindowLongとかに埋めておく、みたいな感じで宜しいのでしょうか?

396 名前:デフォルトの名無しさん :02/07/04 01:47
>>395
普通に関数のポインタ渡せない?

397 名前:デフォルトの名無しさん :02/07/04 01:50
ふつー、dllはexeと同じアドレス空間に配置されると思うが。

398 名前:392 :02/07/04 02:08
>>396 >>397
レスありがとうございます。

あー、あたしってば情けない(´・ω・`)
どうも挙動がおかしいと思ったら、グローバルフック用のdllだった
みたいです…ううう、みなさん、ほんますんませんです(*/ω/)

今大急ぎで適当なdll作ってやってみたら、皆さん仰るとおりなんの問題もなく
上手く行きました。(蛇足ながら一応グローバル&&GetWindowLong版の方も成功しました)

夜遅くにお騒がせしてすいませんです。重ね重ね皆様に感謝です。

399 名前:デフォルトの名無しさん :02/07/04 12:39
358がMFCのMLにポストしたね。
ここはどうやら役に立てなかった模様、残念

400 名前:デフォルトの名無しさん :02/07/04 20:58
>>358はマルチスレッドでなんとかならんのかね?

401 名前:デフォルトの名無しさん :02/07/04 21:09
MFCのMLを見る限りではpostmessageの勉強をするということで決着したみたいだな。

402 名前:kaz(358) :02/07/04 21:25
すいません。別にこっちが役に立たなかったわけじゃないです。
ただ、API使ったこと無かったんで、今更、MFCで教えてくださいとは
書きづらかっただけです。ほんとすみません。


403 名前:デフォルトの名無しさん :02/07/04 22:10
windows上のvisual applicationの開発では
visual c++とc++ builderのどちらが素早く開発しやすいですか?

404 名前:デフォルトの名無しさん :02/07/04 22:13
>>403
慣れてる方。

405 名前:デフォルトの名無しさん :02/07/04 22:35
どちらも初めての場合は?>>404

406 名前:デフォルトの名無しさん :02/07/04 22:37
安い方。
お金を貯める時間が短くてすむ

407 名前:デフォルトの名無しさん :02/07/04 22:42
もう持っていたら?>>406

408 名前:デフォルトの名無しさん :02/07/04 22:44
>>407
インストール時間が短い方。
インストール済みなら起動が早いほう。

409 名前:デフォルトの名無しさん :02/07/04 22:46
VC++のスレで聞くことが間違ってるという指摘はあえてしないのか?

410 名前:デフォルトの名無しさん :02/07/04 23:19
>>407
だったら、両方入れてちょっと使って見りゃいいじゃん。
いいかげんウザイから、もう来るな、ぼけ。

411 名前:デフォルトの名無しさん :02/07/04 23:25
このスレには
両方使って開発した経験のある人はいないということでOK?

412 名前:デフォルトの名無しさん :02/07/04 23:48
>>411
はいはい、OK だよ。どうでもいいから、氏んでてくれ。

413 名前:デフォルトの名無しさん :02/07/05 00:10
APIベース(自分でwin main作る)プログラムでMFCも使うこと出来ますか?
たとえばinclude何々とかすれば使えますか。
ファイルダイアログ とか CString とか 便利なもんで。
なにとぞ御教授おねがいします。

414 名前:デフォルトの名無しさん :02/07/05 00:13
すいません、これどういう意味ですか?

x>0?y:0

415 名前:デフォルトの名無しさん :02/07/05 00:16
z=x>0?y:0で 
x > 0 なら z = y
x > 0 では無いなら z = 0

ちがったっけ?

416 名前:デフォルトの名無しさん :02/07/05 00:20
if(x>0){z=y;}else{z=0;}
ってことですね?
ありがとうございました。

MSDNに載って無いのなんでなんだろう。

417 名前:デフォルトの名無しさん :02/07/05 00:23
>>414 おねがいします

418 名前:デフォルトの名無しさん :02/07/05 00:24
三項演算子で検索汁

419 名前:414=416 :02/07/05 00:24
>>417
?

420 名前:デフォルトの名無しさん :02/07/05 00:25
まちがえました >>413 です 質問しにきたのに、質問答えちゃいましたよもう。

421 名前:414=416 :02/07/05 00:27
みなさんどうもありがとうございました。

422 名前:デフォルトの名無しさん :02/07/05 00:29
>>413
出来る。
afx.hじゃなく、ウィンドウを使うときは、AfxWinInitするとよし。

423 名前:デフォルトの名無しさん :02/07/05 00:32
>>422 御教授ありがとうございます。 ではまた

424 名前:デフォルトの名無しさん :02/07/05 02:24
VC6なんですが、以下がコンパイルできません。
class Base {};
class A : public Base {};
class B : public Base {};

bool b = true;
Base* p = (b)? new A : new B;

「AはBに変換できません」というようなエラーメッセージがでます。if文使えばまあ
いいんですが、1行で収めたいんです…。
なんとかならんもんでしょうか? ちなみにgccではコンパイルできました。

425 名前:デフォルトの名無しさん :02/07/05 02:28
ベースのデストラクタをvirtualにしる!

426 名前:425 :02/07/05 02:39
いや、違う。
VCの参考演算子のバグか?

427 名前:425 :02/07/05 02:52
いや、違う。
2項目と3項目は変換できないといけないようだ。

428 名前:425 :02/07/05 03:05
いや、違う。
まてよ・・・
いや、違う。
もしかして・・・

429 名前:デフォルトの名無しさん :02/07/05 03:28
static_cast<Base*>(new A) : static_cast<Base*>(new B);に汁

430 名前:デフォルトの名無しさん :02/07/05 04:24
Base* p = (b)? static_cast<Base*>(new A) : static_cast<Base*>(new B);
長!

431 名前:デフォルトの名無しさん :02/07/05 04:34
規格じゃ3項演算子の3項目から2項目への変換があるか、
または同じ型でなければコンパイルできないはず。

A* p = (b) ? new A : newB;

この例を見れば分かるでしょ

432 名前:425 :02/07/05 07:18
いや、違う。
おそらく・・・
いや、違う。
そうか!
















いや、違う。


433 名前:デフォルトの名無しさん :02/07/05 09:51
VisualCじゃない質問ばっかり
C++じゃん

434 名前:424 :02/07/05 15:53
gccではコンパイルできたのでVC特有の動作かと思ったんですが、
>>431
をみて納得しました。たしかにコンパイルできませんね。
あたりまえですが、gccでもこれはダメでした。
Base* p = (b)? new A : new B;
がgccでコンパイルできるのはgccが三項演算子の解釈を拡張しているんでしょう。
みなさんありがとうございました。

435 名前:なつかしの関数電卓 :02/07/05 15:55
VC++ コンパイル時オプション指定パラメータのドキュメント探してます。
MSDNは高くて持っていないので、その他で乗っているもの探しています。
どうしても再帰でプログラム書かなければならないので、
スタックを多くしたいのです。

436 名前:デフォルトの名無しさん :02/07/05 17:10
cl /?

437 名前:デフォルトの名無しさん :02/07/05 21:57
さっき間違えてC++で訊いてしまったらこちらへ誘導されました。
自分まだ林氏のスーパービギナー編を一通りやっただけのペーペー初心者です。
今、エディットボックス3つと四則演算ボタンを配置しただけの簡単な電卓を作ろうとしていて、
@ed1と2に値を入力
A「+」とか「-」とかを押す
Bed3に答え(浮動小数点型)が表示
という風にしたいのですが、
出だしはCString ssでは駄目なのかとか、
またm_ed1を1項、2を2項と定義付けるにはどう記述するのかからして分りません。
ヘルプや言語リファレンス本で調べてもいまいち・・(あまりに初歩だから載ってない?)。
学校の一室にしかソフトが入ってないので(自前で買うには高い)直接いじれる日時が限られてるし・・どなたか教えて頂けないでしょうか。


438 名前:437 :02/07/05 22:10
あ、ここもVC++とはチョト違うんですね・・すいません気をつけます(汗

439 名前:デフォルトの名無しさん :02/07/05 22:14
計算する為のトリガが「+」や「−」なんだから、まずキーをアプリケーションで
受け取るためにはどうすればいいのか考えよう&ネットで調べてみよう。
エディットボックスの読み書きはスーパービギナー編にも載ってたはず。
MSDNのCEditのクラスメンバを調べてもいいし。

440 名前:デフォルトの名無しさん :02/07/07 09:48
今までFORTRANを使用していて最近VCを始めたんですけど
VCでクラス内でのグローバル変数ではなくプロジェクト内の
すべてのクラスからアクセスできるグローバル変数は
どこでどのようにして宣言すればいいのでしょうか?

基本的なことで申し訳ありませんがよろしくお願いします。

441 名前:デフォルトの名無しさん :02/07/07 10:30
>>431
> 規格じゃ3項演算子の3項目から2項目への変換があるか、
> または同じ型でなければコンパイルできないはず。
何でそう言う制約が必要なんだろ ?
A *p = (b) ? new A : new B;
がダメなのは、b = FALSE の時に A *p = new B; となるからダメなのはわかる
けど
Base *p = b ? new A : new B;
なら、Base *p = new A; と Base *p = new B; なんだから別に問題ないと思う
けど。不思議じゃ...。

442 名前:デフォルトの名無しさん :02/07/07 10:36
>>441
A *p = ( (b) ? new A : new B );


443 名前:441 :02/07/07 10:54
>>442
何が言いたい ? A *p = ( (b) ? new A : new B ); がダメなのはわかっ
てるぞ。

444 名前:デフォルトの名無しさん :02/07/07 11:01
厨房の香り漂う...

445 名前:デフォルトの名無しさん :02/07/07 11:02
あー、すまそ。Base*でもいいよ。
括弧内が先に評価されてそこで返値が決定される必要がある。


446 名前:441 :02/07/07 11:14
>>445
あ〜〜〜、なるほど言われてみりゃ 括弧内 の評価が終わった時に一応
返値の型決めないといけないからか...。これぐらいなら共通の型を見つ
けるのも難しくないだろうけど多重継承バリバリだとコンパイラも大変だ
わな。サンクス、一つ勉強になったよ。

447 名前:デフォルトの名無しさん :02/07/07 13:23
>>440
変数、定数専用のcppとhを用意して必要なクラスでincludeすれば良いべ。

448 名前:デフォルトの名無しさん :02/07/07 14:23
>>447
>変数、定数専用のcppとhを用意して必要なクラスでincludeすれば良いべ。
ということは

class GlobalVal
を作ってメンバ変数にグローバルで扱いたい変数を定義するということですか?
その場合cppには特にメソッドをいれなくてもいいんですよね?
とりあえず存在だけしていればいいということですか?

なんか質問ばかりですみません。

449 名前:デフォルトの名無しさん :02/07/07 14:31
クラスはいらない。

実装.c
int global_val;

使用者.c
extern int global_val;

これでOK

450 名前:440 :02/07/07 14:36
ん? 考えてて思ったんですが、
グローバル変数を格納するクラスを作ってもどこでインスタンスを作るかに
よってグローバルに扱えないことないですか?

たとえば今、それぞれ4つのcppとhファイルがあるんですけど
それらすべてで扱いたいグローバル変数を格納したクラスのインスタンスは
どこで生成すればいいですか?

結局インスタンスを生成したソースの中でしか使えないってことでは・・・。

どうなんでしょう?
よろしくお願いしますm(_ _)m


451 名前:440 :02/07/07 14:38
すいません、かぶってしまいました。
449さん回答どうもありがとうございます。

もう一度試してみます(^^)

452 名前:デフォルトの名無しさん :02/07/07 15:42
Visual C++ .NET Standardで作ったものって配布可能でしょうか?

MSのサイトを探してみたのですが、特にNGという情報が載って
いなかったので。

453 名前:デフォルトの名無しさん :02/07/07 15:44
>>452
NGだったらStandardなんて名前は付けないと思う・・・

454 名前:デフォルトの名無しさん :02/07/07 15:54
>>453
ありがとうございます。

・6.0Std.よりも安い
・コンパイラの最適化も省かれている

ので、もしかしたらと思っていたのです。今から買ってこようかな。

455 名前:デフォルトの名無しさん :02/07/07 16:17
商用不可。BorlandのPersonalと同じ

456 名前:デフォルトの名無しさん :02/07/07 20:59
>>451
>>449さんの言ってる事に>>447のを加えると、

実装.c
int global_val;

実装.h
extern int global_val;

使用者.c
#include "実装.h"

って感じ。グローバルのものは全部一括して.cと.hに突っ込んじゃう。

457 名前:452 :02/07/07 21:52
>>455

ぐぅ、商用不可でしたか。
キャッシュバックキャンペーンもあるし、かみさんに内緒でPro.を
買おうかな。C♯もさわってみたいし。

458 名前:デフォルトの名無しさん :02/07/07 22:12
糞シェア作って公開するんじゃねぇ

459 名前:452 :02/07/07 23:08
C++.netのPro相当のエディションがあればなあ…

>>458
期待に添えないのですが、シェアウェアを作る予定はないのです。


460 名前:デフォルトの名無しさん :02/07/07 23:12
いらねぇソフトやるよ
http://pc.2ch.net/test/read.cgi/software/1025311611/

このスレの24がVS.NET Proパッケージを\5kで譲ってくれるらしい。

461 名前:デフォルトの名無しさん :02/07/08 23:35
関連付けの修復ってできませんか?
再インスコするしかないのかな...

462 名前:デフォルトの名無しさん :02/07/08 23:36
>>461
変更する前に、元の関連付けを退避させておくしかないんじゃない?

463 名前:461 :02/07/08 23:43
>>462 あ、VisualStudio(VC6ですが)の関連付けです。

464 名前:デフォルトの名無しさん :02/07/09 11:16
画面モードの変更について質問です。
GetDeviceCaps(GetDC(NULL),VREFRESH)でリフレッシュレート
が取得できますが、NTのみとMSDNにかいてあります。
それ以外のOSでは戻り値は不定なんでしょうか?

後、アプリ終了時にWM_DESTROYメッセージが送られてきたところで
ChangeDisplaySettings(&old_dev_mode, 0)を呼び出して
画面モードを変更しているのですが失敗してしまいます。

何かご存知の方おられましたら教えてください。

465 名前:デフォルトの名無しさん :02/07/10 05:59
VisualCスレとVisualC++スレがあるんだが
こちらは主にSDKを扱っているということなのだろうか

466 名前:デフォルトの名無しさん :02/07/10 08:19
>>465
向こうはMFC専用だから、こっちはそれ以外と思ってた。
Win32APIスレは別にあるけど。

467 名前:デフォルトの名無しさん :02/07/10 12:49
>>465
ここがVC++の本流スレ。(スレ立てた人が ++をつけるの忘れただけ)

「VisualC++(MFC限定)相談室」はタイトルどおりMFC限定です。
「初心者にVisual C++を教えるスレ」は最初はネタスレだった(w
今では初心者スレとして機能しているが。

468 名前:デフォルトの名無しさん :02/07/11 09:10
VC++でSTL使うとやたらと警告が出ます。
具体的には
c:\program files\microsoft visual studio\vc98\include\xtree(120) : warning C4786:
'std::_Tree<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,
std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::set<std
::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::
basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<
std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Kfn,st
d::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,st
d::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> >' : 識別子が '255' 文字に切り捨てられました (debug 情報内)。
c:\program files\microsoft visual studio\vc98\include\set(33) : コンパイルさ
れたクラスのテンプレートのインスタンス化 'std::_Tree<std::basic_string<char,std::char_traits<ch
ar>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::all
ocator<char> >,std::set<std::basic_string<char,std::char_traits<char>,std::alloca
tor<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocato
r<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::all
ocator<char> > > >::_Kfn,std::less<std::basic_string<char,std::char_traits<char>,
std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<c
har>,std::allocator<char> > > >' の参照を確認してください
d:\develop\aaa\aaadlg.h(61) : コンパイルされたクラスのテンプレートのインスタンス化 'std::se
t<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<
std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::alloc
ator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >' の
参照を確認してください

となります。なんですかこれ??

469 名前:デフォルトの名無しさん :02/07/11 09:17
アゲます。↑よろ。

470 名前:デフォルトの名無しさん :02/07/11 09:21
>>468
STLを#includeしてる直前にpragma入れろ

#pragma warning(disable:4786)


471 名前:デフォルトの名無しさん :02/07/11 09:25
>470
ありがとうございます。
この警告は無視しても良いって事ですよね?

472 名前:デフォルトの名無しさん :02/07/11 12:03
WTLの質問です。
class MyTool :
 public CWindowImpl<MyTool, CToolBarCtrl>
{
public:
 DECLARE_WND_SUPERCLASS(NULL, CToolBarCtrl::GetWndClassName())
 BEGIN_MSG_MAP(MyTool)
 END_MSG_MAP()
};

としたクラスを使っているのですが、破棄したときに
CWindowImplRootクラスのデストラクタのassertに引っかかってしまいます。
たとえば、CWindowImpl<MyTool, CAxWindow>のように、他のクラスから継承した場合は
引っかからないのですが、どうしたらいいでしょうか?


473 名前:デフォルトの名無しさん :02/07/11 14:50
VC++のリソースエディタでビットマップを編集しているのですが、
透明色の設定の仕方が分かりません。
どうやったら良いんでしょうか?

474 名前:デフォルトの名無しさん :02/07/11 15:27
VisualStudioで書いたダイアログベースプログラムは、
同じくVisualStudioのインストールされたPCでないと起動しないんですか?

これを回避するには、MFCやめてSDKかなんかで書くしかないんでしょうか?

475 名前:デフォルトの名無しさん :02/07/11 15:28
>>473
リソースエディタはアイコンじゃないと透明色は使えないよ。

476 名前:デフォルトの名無しさん :02/07/11 15:30
>>474
>同じくVisualStudioのインストールされたPCでないと起動しないんですか?

そんなことないよ。



477 名前:474 :02/07/11 15:34
>>476
早速の回答ありがとうございます。
僕の作ったダイアログベースのアプリケーションが、
VSのインストールされたPCでないと起動しないんですが、
なにが問題だと考えられますか?
なにか特殊なファイルをつかっちまってるんでしょうか?

478 名前:デフォルトの名無しさん :02/07/11 15:45
>>477
MFC以外のことが原因なのでは?
MFC使うとMFC42.DLLが必要になるけど、
Win98以降のOSなら、標準で入ってるし。

479 名前:デフォルトの名無しさん :02/07/11 15:45
使ってるはず。
静的リンクとか言うオプションがあるはず。それにしる

480 名前:474 :02/07/11 15:51
”静的リンク”というやつですね。
それは新規作成時にセティーングするものでしょうか。
よくわかりませんが、ちょっと調べてみます。ありがとうございます。

VS入ってないと使えないなんて、あふぉみたいなアプリケーションですからね。とほほ。

481 名前:デフォルトの名無しさん :02/07/11 16:18
ツールバーを右揃えで作りたいのですが、うまい実現方無いでしょうか?
現在、サブクラス化してWM_SIZEメッセージでインデントを挿入しているのですが、
コレだとリサイズの時に激しくちらついてしまいます。

482 名前:デフォルトの名無しさん :02/07/11 16:42
>>480
MFC42.DLLは再頒布可能だよ。
スタティックリンクはProfessionalおよびEnterprise Editionsじゃないとサポートされてない。

それより、デバッグ版なんじゃね?
MFC42D.DLLとかDがくっついてる。
こっちは再頒布不可ね。

483 名前:デフォルトの名無しさん :02/07/11 17:59
マルチスレッドのプログラムで「使用するランタイムライブラリ」
のとこにあるマルチスレッドとマルチスレッド(dll)ってどうちがうのですか?

dllつくるときはマルチスレッド(dll)のほうかとおもてたら、新規プロジェクト
でWin32 DLL を選択したときデフォルトでただのマルチスレッドになってて
あれ?とおもたのです。


484 名前:デフォルトの名無しさん :02/07/11 18:54
MSVCRTを使用するか、libcmtを使用するかの切り替え

485 名前:デフォルトの名無しさん :02/07/11 19:06
VisualC.NETのクラスビューの質問なんですが。
一つのソリューションで作ってるプログラムの
バージョン(具体的には1.0と1.1)の
プロジェクトを管理してるのですが。
クラスビューの1.1の方の関数、例えばMoveTaskTray()を
ダブルクリックすると
1.0の方のMoveTaskTrayにジャンプしてしまいます。
また、関数によってはちゃんと1.1に飛べる場合もあります。
どうしたらいいのでしょうか?
また、同じ関数を二階ダブルクリックすると
一度目は1.0,二度目は1.1へとジャンプする場合もあります。
.ncbファイルと.clwファイルを削除すると
クラスビューを再構築できると聞き、やってみたのですが
直らなかったです。
よろしくお願いします。

486 名前:デフォルトの名無しさん :02/07/11 19:30

補足です。
1.1のMoveTaskTrayにジャンプしたい場合
1.1の.cppが開いている場合
ちゃんと飛べるようです。
逆に開いてなければ
1.0と1.1どちらへジャンプするかランダムです。
よろしくお願いします。

487 名前:デフォルトの名無しさん :02/07/11 21:26
AppWizardを使い、基本クラスをCFormViewにしてプロジェクトを
作りました。ボタンを張り付けてそのBN_CLICKEDのメッセージを
CMainFrameのほうで取りたいんだけどうまくいきません。

ClassWizardのメッセージマップでクラス名の
プルダウンボックスにCMainFrameを指定して関数を追加したけど
そこを通ってくれないみたい。
なんで?

何がしたいかっていうとCFormView上のボタンを押したときに
アプリケーションを終了させたいのでCMainFrameの
DestroyWindow()を呼びたいの。

他にいい方法ってあります?

488 名前:デフォルトの名無しさん :02/07/11 23:15
>>487
フォーム側でボタンメッセージを受け取ったらそこで
AfxGetMainWnd()->SendMessge( WM_CLOSE );
で駄目かい?

489 名前:デフォルトの名無しさん :02/07/11 23:20
SetTimerで発生するイベントは、
他の関数内を実行している時でも
割り込み的にSetTimerの関数が実行されるのでしょうか?
それとも、実行中の関数から抜けるまで
プールされるのでしょうか?
どなたかご教授お願い致します。


490 名前:487 :02/07/11 23:34
>>488
できました。
ありがとうございます。

AfxGetMainWnd()なんて知らなかった・・。

491 名前:デフォルトの名無しさん :02/07/12 00:29
>>489
いろんなところに質問してないで、自分で試したほうが早いと思われる。
最後の引数に関数ポインタを指定すればその関数が直接実行される。
NULLなら WM_TIMER が飛んでくる。

492 名前:デフォルトの名無しさん :02/07/12 01:33
>>489
割り込み処理はしないよ。
実行中の関数が終了するまでは、
メッセージは保留状態。

493 名前:デフォルトの名無しさん :02/07/12 02:44
コモンダイアログの質問なんですが、GetOpenFileNameやGetSaveFileNameで出てくるファイルダイアログのリストビューの形式を変えるにはどうしたらいいのでしょうか?
デフォルトはLVS_LISTになっているので、これを最初からLVS_REPORTに変えておきたいのですが。
ウィンドウスタイルを直接変更してもファイルリストが正しく更新されないため表示がおかしくなるだけでした。

494 名前:デフォルトの名無しさん :02/07/12 15:20
SDKでのリストビューのサブアイテムの編集ができません。
何か知っている方おられましたら、教えてください。

495 名前:デフォルトの名無しさん :02/07/12 15:23
自前でedit貼り付けてください。

496 名前:デフォルトの名無しさん :02/07/12 20:54
>>492
本当にありがとうございます。


497 名前:449 :02/07/13 00:32
以前グローバル変数について質問したものです。
こちらで回答を頂いて早速試したところうまくいきました。
しかし、自分で作ったクラス(ここではCBlockというクラスを生成しました。)
をグローバルに扱うことができずにいます。

今は
実装.cpp
int totBlk;
CBlock blk[10];

とし、
使用者.cpp
extern totBlk;
extern blk[10];
:   :
:   :
blk[totBlk]=CBlock();

としていますがコンストラクタを呼ぶ時に
使用者.cpp内ではblkがCBlockのクラスであることを認識していない
というコンパイルエラーがでます。

そこで
extern blk[10]; → extern CBlock blk[10];
と明示してやると今度はそのアプリ(現在はRhinocerosというCADソフトのプラグインを製作中)が強制終了
されてしまいます。

web等で調べてこのようにしたのですが何か文法的な間違いを犯しているでしょうか?
理由をご存知の方がいらっしゃったらどうかアドバイスを頂けないでしょうか?
よろしくお願いいたします。

それでは失礼します。

498 名前:NDR :02/07/13 00:34
>>494
一列目のやつならそのままでもOKだけど、2列目以降の場合はeditをCreateWindowして貼り付けないと
どうしようもない。
自分で頑張ってコントロールをこさえよう。

MFCだったらこのあたり結構楽にできて再利用できるんだけど(w。

499 名前:デフォルトの名無しさん :02/07/13 00:55
WTLの方が再利用性高いです

500 名前:NDR :02/07/13 00:57
>>499
いゃん。

まぁ、ウィンドウクラスを作ってしまえば良いわけですが。



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