■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
VisualC++相談室 5
251
名前:
247
:01/12/06 17:00
どうしようもない間抜けっぽいので教えてやる。
カレントディレクトリのiniファイルを見に行け。
デバッグ時もリリース時も作業用のディレクトリを
ソースと同じディレクトリ(かテスト環境用のディレクトリ)に
しておけ。
iniファイルは一つで済む。
VBのApp.Pathみたいのを期待しているようだが、
「実行モジュールと同じディレクトリのiniファイル」を見に行くのは
VB厨のやり方だ。
252
名前:
デフォルトの名無しさん
:01/12/06 17:08
>>249
> 質問読んでそれぐらいの認識もできない?
煽るな。
俺には書き方が悪いようにしか見えん。何をやりたくて、何を避けたいのかのトレードオフが
分からんぞ。
1 exe と ini ファイルを「常に同じ」ディレクトリに置きたい
2 ini ファイルを複数用意するのは嫌だ
ってのが前提条件なら、そりゃ exe を同一ディレクトリに置くしかないだろ。状況によっては
1 を譲歩して良いが 2 は譲歩できん、ということなら、「状況」と「譲歩」について、詰めて書
け。それはキミにしか判断できないことだ。
#書いてないけど、exe のフルパスを取得する方法はわかってるよね?
253
名前:
デフォルトの名無しさん
:01/12/06 18:54
>>251
現在の状況はそうなっている。
>>252
確かに書き方が悪かったのは認める。
1 ユーザーの環境では常にiniファイルをexeと同じディレクトリに置きたい。だが
2 開発中の環境ではソースが置いてあるディレクトリにiniを置いて
ReleaseとDebugのexeで共通に読み込みたい。
exeの置いてあるディレクトリに置くのは
>>228
で教えてもらった
GetModuleFileName()を使えばできる。が、これでは 2 が解決しない。
カレントディレクトリに置くようにすれば同時に解決するが
"C:\" とかのルートディレクトリレクトにインストールされると
通常、"C:\Program Files\foo" とかにインストールされた場合と
異なり、最後に "\" がつくので特殊な処理がいる。
ルートだけ処理を加えればいいが、日本語のディレクトリや
ネットワークにインストールされた場合、矛盾しない処理方法が分からない。
254
名前:
デフォルトの名無しさん
:01/12/06 18:57
かれんとならディレクトリ名の処理は必要なかろうに...
255
名前:
デフォルトの名無しさん
:01/12/06 19:05
>>254
ディレクトリ名つけずにファイル名だけで open すれば飯竹だよね。謎だ。
>>253
> 開発中の環境
これとユーザの環境の区別を、どうつける? 俺が考えつくのは、
1. インストール時にインストーラで特定の値をレジストリに書き込む
2. その値が書いてあればユーザ環境、なければ開発環境と見なす
とか、
1. 開発環境にはカレントディレクトリに特定のファイルを置いておく
2. そのファイルが存在すれば開発環境、しなければユーザ環境
ってところだが、いずれにせよマーフィーの法則により
1. 開発環境では問題が出ない
2. ユーザに渡した主観、ユーザ環境でのみ使うコードにバグが見つかる
ことが保証されているから、やめたほうが良いと思う。
256
名前:
デフォルトの名無しさん
:01/12/06 19:06
ユーザーが途中でファイルを開いて読み行くとカレントは変わってしまうので
プログラムの起動時のカレントを記憶している。
257
名前:
デフォルトの名無しさん
:01/12/06 19:09
かれんとを元の位置に戻せよ。
おもしろいな、お前のプログラム
258
名前:
デフォルトの名無しさん
:01/12/06 19:47
>>257
なるほど・・・。
ファイル処理の後に全部戻せばいいのか。
だがそれだと、深い所に保存したファイルに何度もユーザーが触る時に不便だろう。
ただ、Win2000あたりからアプリが前回の最後のディレクトリを覚える仕様に
変わった?のでよく分からんのだけど。
余談だがVC++ではプロジェクトを切り替えてもディレクトリが前回のプロジェクトのまま、
とかなって不便なのだが。
259
名前:
デフォルトの名無しさん
:01/12/06 20:02
いや、やっぱりフルパスでのディレクトリの処理をする必要がある。
ファイルのオープン中にも画面の書き換えが発生すると
所定の位置のデータベースを読みに行く仕様なので。
260
名前:
デフォルトの名無しさん
:01/12/06 20:07
つかなんで開発中にReleaseとDebugのiniを同じにすんの?
開発中はDebugだけでテストすりゃいいんじゃ?
261
名前:
デフォルトの名無しさん
:01/12/06 20:10
>>260
速度が違いで発生するバグとかに対処するため普段はReleaseで動かしてる。
Debugは問題が発生した時の追跡のみに使用。
262
名前:
デフォルトの名無しさん
:01/12/06 20:13
放置しても(・∀・)イイ?
263
名前:
デフォルトの名無しさん
:01/12/06 20:15
確かに我ながらうざいな。消えるわ、荒らして悪かったな。
264
名前:
デフォルトの名無しさん
:01/12/06 20:17
とりあえずbuild_path()とかなんとか関数つくっとけ。
で、カレントディレクトリはころころ変えるな。
265
名前:
デフォルトの名無しさん
:01/12/06 21:14
>>263
初めていいこと言った
266
名前:
デフォルトの名無しさん
:01/12/06 22:07
☆WinXPに新しく追加されたAPI☆
267
名前:
デフォルトの名無しさん
:01/12/06 22:11
↓のプログラムはウインドウを表示するプログラムなおですが、どこが悪いのかわりません
どこが悪いのでしょうか?
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
HWND hWnd;
MSG message;
WNDCLASSEX wc;
wc.hInstance = hInstance;
wc.lpszClassName = "DDraw";
wc.lpfnWndProc = WndProc;
wc.cbSize = sizeof(WNDCLASS);
wc.style = 0;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wc.lpszMenuName = NULL;
if(!RegisterClassEx(&wc))
return 0;
hWnd = CreateWindow(
"DDraw",
"DirectDraw",
WS_OVERLAPPEDWINDOW,
300,
200,
200,
200,
HWND_DESKTOP,
NULL,
hInstance,
NULL);
ShowWindow(hWnd, nShowCmd);
UpdateWindow(hWnd);
while(GetMessage(&message, NULL, 0, 0)){
TranslateMessage(&message);
DispatchMessage(&message);
}
return message.wParam;
}
268
名前:
デフォルトの名無しさん
:01/12/06 22:11
続き
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message){
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
269
名前:
デフォルトの名無しさん
:01/12/06 22:17
>267
エラーを報告白やヴォケ
俺の予想としてはHWND_DESKTOPって何打?ってかんじ。ペアレントがなぜペアレントを持つのかってかんじ。
270
名前:
デフォルトの名無しさん
:01/12/06 22:27
っていうか、プリプロセッサ使えば一発な気が・・・
win32_debugとかwin32_nodebugとかあるし
自分で作って設定してもいいし・・・
271
名前:
デフォルトの名無しさん
:01/12/06 22:50
>>267
RegisterClassEx() に失敗してるやん。return 0 で終わらせずに MessageBox()
でエラーメッセージぐらい表示しとけよ。
WNDCLASSEX 使うなら wc.cbSize のサイズが間違ってる。
272
名前:
デフォルトの名無しさん
:01/12/06 23:05
int PASCAL WinMain(hInstance,hPrevInstance,lpszCmdLine,cmdShow)
ってなってるんですけど
PASCALってなんですか?
273
名前:
デフォルトの名無しさん
:01/12/06 23:08
win*.hを検索して見ろ
274
名前:
Kusakabe Youichi
:01/12/06 23:11
In article
>>272
, デフォルトの名無しさん/272 wrote:
> int PASCAL WinMain(hInstance,hPrevInstance,lpszCmdLine,cmdShow)
> ってなってるんですけど
> PASCALってなんですか?
マニュアルに書いてありますよ。(ちゃんと買ったものなら)
275
名前:
デフォルトの名無しさん
:01/12/06 23:12
マニュアル読んでも意味が分からない、に一票
276
名前:
てんさいぷろぐらむぁ(偽)
◆8Fck5JHo
:01/12/06 23:30
>>267
1:WNDCLASSEXのcbSizeが間違ってる。
sizeof(WNDCLASS)は間違い。
sizeof(WNDCLASSEX) か sizeof(wc)に変更
2:hIconSmが設定されていない。
WNDCLASSにはないけどWNDCLASSEXにはhIconSmがある。
現在のやり方では構造体の初期化をしているわけではないので、大変イケナイ値が入っている。
>>269
HWND_DESKTOPはNULLで定義されていたような。
デスクトップを親にもつウインドウ(トップレベルウインドウ)のような抽象化をする為に
HWND_DESKTOPがあるものだと思っているのですが・・・
277
名前:
269
:01/12/06 23:36
>276
初耳。ありがとう。
278
名前:
デフォルトの名無しさん
:01/12/06 23:53
>>272
MSDN Library 引きましょう。
今は PASCAL は obsolete だから WINAPI を使うのが推奨されてるけど。
279
名前:
267
:01/12/07 00:09
いろいろなレスありがとうございました。
なんとか解決できました。
280
名前:
デフォルトの名無しさん
:01/12/07 02:04
っていうか、iniファイルを複数作りたくないなら、win.iniかレジストリ使うのが
普通だと思うが。もし箱売りのソフトならレジストリ使わないとWindowsロゴ取得で
ひっかからないか?
ReleaseとDebugを同じディレクトリにするのがスマートじゃないとか言ってるけど、
その根拠も示されてないし。なんか、ただのわがままにしか見えない。
そもそもGetModuleFileNameを知らなかったり、パス解析で悩むようなレベルだから
仕方ないのかもしれないが。あと質問してるくせに偉そうだし。レベル低いくせに。
_splitpathを面倒とか言ってたけど、このスレに書くために押したキーの回数よりも
ソースに_splitpathを追加する方がよっぽど少ないと思うが。
マルチ言語化とか考えてるなら、パス解析はAPIのパス関数を利用するのが一番安全。
ただしWin98以降限定になってしまうが。
調子に乗ってマルチ言語化してると台湾あたりから中国語でお礼とかバグ報告が来る
危険も伴なう諸刃の(以下略)。っていうか読めないっつーの。しかも中国人の書い
た下手な英語は中国語よりもわけ分からん。
281
名前:
デフォルトの名無しさん
:01/12/07 02:06
知らない間に韓国語版が出てたりしてアゼーン
282
名前:
デフォルトの名無しさん
:01/12/07 02:09
>>280
まぁまぁ。死体に鞭打ちうつなって。
283
名前:
デフォルトの名無しさん
:01/12/07 18:47
すいません、間違えてその4に書いてしまったのでもう一回書いちゃいます。
シリアル通信で、DCB構造体のfAbortOnErrorをTRUEにしても
エラーのときに処理を中断しないんです(FALSEと変わらない)。
Win2000だと設定通り動くんだけどWin98でやったらこうなってしまいます。
同じような人いませんか?どっちでもいいんだけどなんか気持ち悪いです。
284
名前:
デフォルトの名無しさん
:01/12/07 18:57
VC++6.0で質問です。
指定したファイルをZIPファイルに圧縮するプログラムを作りたいんですけど
zip32.dll、Unzip.dllをロードするのはわかるけど、肝心の関数がどういうもの
か?
GetProcAddress()で何を呼び出せばいいかわからない。
サンプルがあれば誰か教えてください。
285
名前:
デフォルトの名無しさん
:01/12/07 19:07
>>284
ライブラリやヘッダ付いてなかった?
286
名前:
デフォルトの名無しさん
:01/12/07 19:22
今見てきたら、開発用は別に配ってるのね。
それ落とすべし。
287
名前:
デフォルトの名無しさん
:01/12/07 19:29
>>285
libファイルはありますがhファイルが無し。(それで困ってる)
DLLだけでもLoadlibrary()を使えばOKと思いますから。
288
名前:
デフォルトの名無しさん
:01/12/07 19:41
>>287
ん?ちゃんと付いてたぞ。
289
名前:
デフォルトの名無しさん
:01/12/07 21:36
ちょっと質問
for (int i = 0; i < 5; ++i);
for (int i = 0; i < 5; ++i);
これがコンパイルできないんですけど普通ですか?
290
名前:
デフォルトの名無しさん
:01/12/07 21:37
#define for if (0) ; else for
FAQだ
291
名前:
デフォルトの名無しさん
:01/12/07 21:49
>>289
i の2重定義ですな。 フツーフツー。
292
名前:
デフォルトの名無しさん
:01/12/07 22:44
現在VC6って、サービスパックいくつまで出てるんでしょう?
今3があたっていますが、これって古いですか?
293
名前:
デフォルトの名無しさん
:01/12/07 22:45
SP6
294
名前:
デフォルトの名無しさん
:01/12/07 22:54
サービスパックって、いつまででるの?
295
名前:
デフォルトの名無しさん
:01/12/07 22:57
誰も知りません
296
名前:
284
:01/12/08 09:22
>>288
どこのWebか教えてください。
297
名前:
デフォルトの名無しさん
:01/12/08 11:22
MFCで CHtmlView を使っているんですが
例外処理 (初回) は ***.exe (KERNEL32.DLL) にあります: 0xC0000005: Access Violation。
というメッセージがいっぱい出ます。
これってこういうものなんですか?
特別なことはしてないつもりですが CHtmlView が例外出しまくりです。
それと表示しているHTMLのリンクをクリックするとブラウザが起動してしまいます。
CHtmlView 内に表示したいんですがどうしたらいいですか?
298
名前:
デフォルトの名無しさん
:01/12/08 11:32
べつにいいんでないの?
299
名前:
デフォルトの名無しさん
:01/12/08 13:29
CString型からchar型に変換するにはどうすればいいですか?
300
名前:
デフォルトの名無しさん
:01/12/08 13:34
一文字目だけでいいな
CString str = "aaaa";
char c = str[0];
301
名前:
299
:01/12/08 15:25
>>300
どもありがとうございました
302
名前:
デフォルトの名無しさん
:01/12/08 15:40
>>299
CString str = "AAAA";
char *s = (LPTSTR)(LPCSTR)str;
303
名前:
デフォルトの名無しさん
:01/12/08 15:43
汎用キャラクタマッピングをよく知らない人はキャストにLPTSTRは使っちゃいけません。
304
名前:
syosinsya
:01/12/08 17:07
Midi再生をしようと思って、
MCI_OPEN_PARMS open;
MCI_PLAY_PARMS play;
open.lpstrDeviceType = "Sequencer";
open.lpstrElementName = name;
mciSendCommand(0, MCI_OPEN,MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, ( DWORD )&open );
mciSendCommand(open.wDeviceID,MCI_PLAY,MCI_NOTIFY,( DWORD )&play );
のようにして再生できたのですが、連続再生がうまくいきません。
色々調べてみたところ、メッセージが送られたら、MCI_SEEKで戻す、というようにすればいいとのことでしたが、
その、MCI_SEEKで戻す、というのの具体的方法がわかりません。
上記のようなソースを元に関数化したいと思っているのですが、毎回呼び出される事に、はじめから再生するようにするにはどうすればいいのでしょう?
305
名前:
( _ 。。) _ バタ。
:01/12/08 21:10
>>303
#define LPTSTR unsigned short*
って安直な考えはしちゃいけなかったのか…(汗)
>>304
MM_MCINOTIFY のメッセージをトラップして
mciSendCommand(open,MCI_SEEK,MCI_SEEK_TO_START,(DWORD)&prm);
で先頭に戻してもっかいPlayを叩き込んで終りです。
あ。念の為にSEEK前にStop噛ました方が良いかな?
306
名前:
305(ミス修正)
:01/12/08 21:12
mciSendCommand(open,MCI_SEEK,MCI_SEEK_TO_START,(DWORD)&play);
かな? 304さんの定義を使うとこうですな。 ~~~~~~
307
名前:
デフォルトの名無しさん
:01/12/08 23:19
GetBuffer()
308
名前:
デフォルトの名無しさん
:01/12/09 20:12
マウスエミュレーターみたいなのを作りたいのですが
(キーボードのスペースを押すとクリックになるみたいなやつ)
全然方針が立ちません。
情報持っている方がいらしたら、是非教えてください。
309
名前:
デフォルトの名無しさん
:01/12/09 20:13
mouse_event
310
名前:
デフォルトの名無しさん
:01/12/09 20:17
他のウインドウに対してマウスイベントを送る事なんて
できるんですか?
311
名前:
デフォルトの名無しさん
:01/12/09 20:18
余裕
312
名前:
デフォルトの名無しさん
:01/12/09 20:21
くそめしまえだぜ
313
名前:
デフォルトの名無しさん
:01/12/09 20:35
Windows NT/2000:この関数は、SendInput 関数にとって代わられました。SendInput 関数を使ってください
となっていますが、98ではSendInput使っても動かないんですよね?
314
名前:
デフォルトの名無しさん
:01/12/09 20:36
SendInputのInput構造体の説明もなかったし・・・
315
名前:
デフォルトの名無しさん
:01/12/09 21:59
Windows2000 のOSの勉強したいのだが、
C++で実装して説明している書籍教えて
316
名前:
デフォルトの名無しさん
:01/12/09 22:07
何いってのかわからんけどSDK読め
317
名前:
( _ 。。) _ バタ。
:01/12/09 22:52
>>313
MSDN読むべし、SendInputの項目、最後の方に
Windows NT/2000:Windows NT 4.0 SP3 以降
Windows:Windows 98
ヘッダー:winuser.h 内で宣言
インポートライブラリ:user32.lib を使用
<<
http://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_sendinput.htm
>>
>>314
INPUT as;
as.hi.uMsg;
as.hi.wParamH;
as.hi.wParamL;
as.ki.dwExtraInfo;
as.ki.dwFlags;
as.ki.time;
as.ki.wScan;
as.ki.wVk;
as.mi.dwExtraInfo;
as.mi.dwFlags;
as.mi.dx;
as.mi.dy;
as.mi.mouseData;
as.mi.time;
as.type
とりあえず、全部列挙してみたが…割り込ませるイベントの内容を記述するらしいな。
#KeyIvent / MouseIvent / じゃあ、hiって何のイベントだろ…(汗
318
名前:
デフォルトの名無しさん
:01/12/09 22:54
>>315
お前はホントにWindows2000の"OSの勉強"がしたいのかと問いたい。
問い詰めたい。小一時間、問い詰めたい。
319
名前:
デフォルトの名無しさん
:01/12/09 23:40
>>315
「Windows2000 アーキテクチャ徹底解説」
Windows2000 の実装まはやってないけど。
320
名前:
デフォルトの名無しさん
:01/12/10 01:27
ボーランドのCPPとマイクロソフトのCPPってどっちがよいの?
321
名前:
デフォルトの名無しさん
:01/12/10 01:56
>>320
CPPって、プリプロセッサの話?
ANSI準拠してれば、どっちがどうとかってあんまり関係ないような気が。
処理系依存部分の優劣が問いたいのだろうか。
322
名前:
デフォルトの名無しさん
:01/12/10 02:01
いやいや、マイクロソフトにはヴィジュアルC++。ボーランドにはC++builderが
あるじゃないですか?買うならどっちかなって。
基本的にどちらが優れているか知りたいです。
323
名前:
デフォルトの名無しさん
:01/12/10 02:06
>>322
判断基準が示されていないので、判断しようがありません。
「金閣寺と東京都庁があるじゃないですか? 観光するならどっちかって?」
知るかよ。
324
名前:
デフォルトの名無しさん
:01/12/10 02:20
>基本的にどちらが優れているか知りたいです。
Rubyに決まっているだろっ!
325
名前:
デフォルトの名無しさん
:01/12/10 04:26
>>324
C言語を#execしろYO!
#最近、セキュリティーの関係上 ダメなサーバー多いけどさ
326
名前:
デフォルトの名無しさん
:01/12/10 04:49
つまらない質問で恐縮ですが、実行ファイルのアイコンに
何らかのファイルがドラッグ&ドロップされたとき、
それを無視して別のファイルを開きたい場合に
どうしていいか判りません。つまり以下のようにすると、
#include <windows.h>
#include <cstdio>
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(0,lpCmdLine,"コマンドライン引数",MB_OK);
if(FILE *fp=fopen("./hoge.txt","r")) {
fclose(fp);
MessageBox(0,"ファイルの読み込みに成功しました.","OK",MB_OK);
} else {
MessageBox(0,"ファイルの読み込みに失敗しました.","ERROR",MB_OK);
}
return 0;
}
単体で起動すれば普通にhoge.txtを開いてくれるのですが、
何らかのファイルがドラッグ&ドロップされた場合、
つまりコマンドライン引数が存在する場合はhoge.txtを開いてくれません。
どなたか知恵を下さい。
327
名前:
デフォルトの名無しさん
:01/12/10 06:56
>>326
てきとーにSetCurrentDirectoryしろ。
328
名前:
326
:01/12/10 08:27
>>327
ありがとう。
とりあえずSetCurrentDirectoryで検索してみます。
329
名前:
デフォルトの名無しさん
:01/12/10 12:39
>>326
アプリケーションが起動されたときのカレントディレクトリ=.exeのある
ディレクトリだと勘違いしてない?
330
名前:
326
:01/12/10 13:42
>>329
さっきそうではないということと、
GetModuleFileName()なるものの存在を知りました。
てきとーにSetCurrentDirectoryを試み中です。
331
名前:
326
:01/12/10 14:35
うまくいきません。
下のようにしてカレントディレクトリのセットは出来たのですが、
相変わらず何らかのファイルをドラッグ&ドロップして起動すると
hoge.txtが開いてくれません。更なる知恵を・・・。
char mpath[1024]; // 実行ファイルのパス名を入れるバッファ
GetModuleFileName(0,mpath,1024); // 実行ファイル名混みのパス名を取得
// パス名の後ろからサーチして最初の\まで(つまり実行ファイル名)を削除
int i = strlen(mp)-1; while (mp[i]!='\\') --i; mp[i] = '\0';
SetCurrentDirectory(mpath);
if(FILE *fp=fopen("./hoge.txt","r")) {
fclose(fp);
MessageBox(0,"ファイルの読み込みに成功しました.","OK",MB_OK);
} else {
MessageBox(0,"ファイルの読み込みに失敗しました.","ERROR",MB_OK);
}
332
名前:
デフォルトの名無しさん
:01/12/10 14:40
hoge.txtをフルパスで指定するのがベスト。
_splitpath()でGetModuleFileName()の結果を分解して、_makepath()で結合
しなおすのが良いかと。
333
名前:
326
:01/12/10 15:26
>>332
どうもです。
char c_mp[1024]; // 実行ファイル名混みのパス名を入れるバッファ
GetModuleFileName(0,c_mp,1024); // 実行ファイル名混みのパス名を取得
string mpath = c_mp; // とりあえずstringに。
s.erase(mpath.rfind('\\')); // おしりから\を探してそれ以降(つまり実行ファイル名)を削除
string readfile = mpath+"/hoge.txt"; // うぉんちゅう。
で出来ました。ありがと〜。
とりあえずファイルをドラッグした場合はカレントディレクトリが変わるということと、
ファイル操作には絶対パスが必要なときがあるということを勉強しました。m_ _m
334
名前:
デフォルトの名無しさん
:01/12/10 17:36
おしりから\を消すのは問題あるよ。「表」とかは2バイト目が\だよ。
335
名前:
味噌醤油醸造株式会社
:01/12/10 17:43
>>334
1.自分自身の.EXEファイルの名前には漢字を使わない。
2.漢字のファイル名にrenameされたときはあきらめる
ということでいかがでしょうか.
336
名前:
デフォルトの名無しさん
:01/12/10 17:45
>>335
そんな運任せなんて……
337
名前:
326
:01/12/10 17:48
>>334
そうかぁ。でもそれを考え出すととても面倒そうなので
いずれまた考えることにします。
# VisualC++の相談というかWindows上でのCの相談でした。
# すみませんです。
338
名前:
デフォルトの名無しさん
:01/12/10 18:03
>>337
おいおい。このぐらいで手を抜くなよ...
1 あたまから \ を探していって(ただし _ismblead() を使ってマルチバイト文字の一バイト目なら飛ばす)、
一番最後の \ を見つける。
2 UNICODE 化してしまう。string ではなく wstring を使えば、悩まなくて良い。
とか、いくらでも手はあるぞ。
339
名前:
326
:01/12/10 19:35
>>338
wstringの使い方がまだよく判っていないのと
_ismblead()がcygwinで見つけられなかったので
_splitpathを使ってみました。表表.exeみたいな実行ファイルでも
うまくいってるみたいです。
char c_mp;
char c_drive[3], c_dir[256], c_file[256], c_ext[256];
_splitpath(c_mp, c_drive, c_dir, c_file, c_ext);
string mpath = c_drive; // とりあえずstringに。
mpath += c_dir; // ディレクトリ名を付けて
string readfile = mpath+"/hoge.txt"; // 出来上がり
340
名前:
デフォルトの名無しさん
:01/12/10 19:40
メニューに使われているフォントと同じフォントを使用したい場合どうしたらいいですか?
GetStockObject(SYSTEM_FONT) で取得したフォントはどういうわけかサイズがあいません。
かなり大きめのフォントが返ってきます。
教えてちょんまげ!
341
名前:
デフォルトの名無しさん
:01/12/10 21:56
>>292
SP5が正解。
342
名前:
味噌醤油醸造株式会社
:01/12/10 22:02
>>340
メニューのフォントって、MS UIゴシックじゃなかった?
(自信無し)
343
名前:
デフォルトの名無しさん
:01/12/10 22:07
>>340
Getパラメーターイんふぉ(なんとか)って関数で取得できた気がするが。
MSDN参照
344
名前:
デフォルトの名無しさん
:01/12/10 22:19
質問。基本的なことで申し訳ないんだが、
CMyViewクラスのメンバ変数とか外部変数を
他のクラスで呼び出したり、値を代入するには
どうすればいいのでしょうか?
逆は出来るんだけど・・・
345
名前:
ppp
:01/12/10 22:22
ええとVC6について質問ですがモノクロのBMPを配列に格納する方法ですが、
C言語の本に
/*--- BitmapToRgb --- 画像変換(Bitmap画像からRGB画像へ)----------------------
hBitmap: 入力Bitmap画像
pr: 出力R画像
pg: 出力G画像
pb: 出力B画像
-----------------------------------------------------------------------------*/
void BitmapToRgb(HBITMAP hBitmap, unsigned char pr[120][160],
unsigned char pg[120][160], unsigned char pb[120][160])
{
HANDLE hDB;
unsigned char *pdr, *pdg, *pdb, *ps, *ps0;
LONG i;
pdr = (unsigned char *)pr; pdg = (unsigned char *)pg;
pdb = (unsigned char *)pb;
hDB=GlobalAlloc(GMEM_MOVEABLE, (DWORD)160*120*4);
ps = ps0 = GlobalLock(hDB);
GlobalLock(hBitmap);
if (bitspixel == 16) { /* 16ビット/画素のフレームメモリ */
GetBitmapBits(hBitmap, (DWORD)160*120*2, ps0);
for (i = 0; i < (DWORD)160*120; i++) {
/* GGGBBBBB RRRRRGGG G成分が6ビット */
*pdb++ = (*ps << 3) & 0xf8;
*pdg = (*ps++ >> 3) & 0x1c;
*pdg++ = *pdg | ((*ps << 5) & 0xe0);
*pdr++ = *ps++ & 0xf8;
/* GGGBBBBB *RRRRRGG G成分が5ビット
*pdb++ = (*ps << 3) & 0xf8;
*pdg = (*ps++ >> 2) & 0x38;
*pdg++ = *pdg | ((*ps << 6) & 0xc0);
*pdr++ = (*ps++ << 1) & 0xf8;
*/
}
}
else if (bitspixel == 24) { /* 24ビット/画素のフレームメモリ */
GetBitmapBits(hBitmap, (DWORD)160*120*3, ps0);
for (i = 0; i < (DWORD)160*120; i++) {
*pdb++ = *ps++; *pdg++ = *ps++; *pdr++ = *ps++;
}
}
else if (bitspixel == 32) { /* 32ビット/画素のフレームメモリ */
GetBitmapBits(hBitmap, (DWORD)160*120*4, ps0);
for (i = 0; i < (DWORD)160*120; i++) {
*pdb++ = *ps++; *pdg++ = *ps++; *pdr++ = *ps++; *ps++;
}
}
GlobalUnlock(hBitmap);
GlobalUnlock(hDB);
GlobalFree(hDB);
}
346
名前:
ppp
:01/12/10 22:25
上のように乗っていたのですが、
これをボタンに割り当ててメッセージハンドらのコードに加えると
ローカル変数の定義がおかしいと出るのですがどのように変更すればいいのでしょうか?
347
名前:
デフォルトの名無しさん
:01/12/10 22:28
>>344
まずC++の勉強から始めれ
348
名前:
デフォルトの名無しさん
:01/12/10 22:41
>>343
NONCLIENTMETRICS ncm;
ZeroMemory(&ncm, sizeof(NONCLIENTMETRICS));
ncm.cbSize = sizeof(NONCLIENTMETRICS);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
で ncm.lfMenuFont を見ればわかると思う。
349
名前:
デフォルトの名無しさん
:01/12/10 23:13
リソースタブのdialogの項目をクリックしてダイアログボックスを
作成したのですが、誤ってコントロールパレットを消してしまい
新しくボタンを追加したりできないので、再び表示させる方法
を教えてください。
350
名前:
デフォルトの名無しさん
:01/12/10 23:33
ツールバーの空いてるところで右クリック。
「コントロール」という項目を選択する。
351
名前:
349
:01/12/11 00:01
>>350
ありがとうございます。
おかげで表示できるようになりました。
メニューの所全部調べてもパレット表示の項目がなかったんで
困っていましたが、右クリックツールバーを表示させればよかったわけなんですね。
でも最初違うウインドウを開いていたので、コントロールパレットが表示されませんでした。
このへんがちょっと混乱させられました。
まだVC++使い始めで付属の入門の本見ながらやってたんですが、
これで再開できます。
352
名前:
ppp
:01/12/11 13:30
レスがつきませんね、聞き方が悪かったのでしょうか?
お分かりになる方、どうかご教授願います。
353
名前:
デフォルトの名無しさん
:01/12/11 15:12
>>352
引数に配列の大きさなんか書いてよかったんか?
354
名前:
デフォルトの名無しさん
:01/12/11 16:02
>>353
それは問題ないと思う。
355
名前:
デフォルトの名無しさん
:01/12/11 16:09
>>352
ボタンに割り当てた部分のコードとか、どのローカル変数の定義が
どうおかしいと言われたのかを書いた方がいいかと。
356
名前:
ppp
:01/12/11 18:30
BitmapToRgbのローカル変数の定義がおかしいといわれました。
コードは下記のようになっています。ONCL2がボタンのBnClickedの変数です。
void CVcpictView::OnCl2()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
*--- BitmapToRgb --- 画像変換(Bitmap画像からRGB画像へ)----------------------
hBitmap: 入力Bitmap画像
pr: 出力R画像
pg: 出力G画像
pb: 出力B画像
-----------------------------------------------------------------------------*/
void BitmapToRgb(HBITMAP hBitmap, unsigned char pr[120][160],
unsigned char pg[120][160], unsigned char pb[120][160])
{
357
名前:
Kusakabe Youichi
:01/12/11 18:49
どうやら、あなたはCの初歩からやり直す必要があるようですね :)
本物の書いた本でも読んでみてはいかがでしょう?
358
名前:
Kusakabe Youichi
:01/12/11 18:54
In article
>>357
, Kusakabe Youichi/sage/357 wrote:
> どうやら、あなたはCの初歩からやり直す必要があるようですね :)
> 本物の書いた本でも読んでみてはいかがでしょう?
本物とは?
359
名前:
ppp
:01/12/11 18:57
レスを下さった方、どうもありがとうございます。
根本的に間違っているのでしょうか?
できたら、その個所の指摘をいただけたらうれしいのですが、
360
名前:
デフォルトの名無しさん
:01/12/11 19:31
わたしはからかわれていることに気がつきました。
361
名前:
デフォルトの名無しさん
:01/12/11 19:35
関数の定義、宣言と呼び出しを、きちんと理解しろやゴルァ
362
名前:
bou
:01/12/11 23:40
OnDraw内なんですけど画像表示の際LoadBitmapはかならずしていないといけないのでしょうか?
LoadBitmapというのは、メモリに特定の画像を転送するようなものだと認識していますが、これをしないと、”キャンパス”自体が作られないように見えます。
このキャンパスに対して別のところから描画してみてもまったく表示されません。なので、LoadBitmapで100*100ほどの白紙を読ませて実験してみたところ、
別のところから描画したものは100*100だけ描画されました。
LoadBitmapというのはキャンパス(受け皿)のようなものも作るのですか?
だとしたら、一旦MDC(CDC)に描画してからpDC.BitBltするような場合は一度希望の大きさの白紙を読ませないといけないのでしょうか????
363
名前:
デフォルトの名無しさん
:01/12/12 13:12
VC++ SP4 で、以下のコードをコンパイルすると、「error C2668: 'foo' :
オーバーロード関数の呼び出しを解決することができません」とかぬかしやがる
んですが、これってフツーですか。
namespace FOO {
void foo( int ch );
void foo( const char *s );
}
using namespace FOO;
using FOO::foo;
int main()
{
foo( "abc" );
return 0;
}
364
名前:
デフォルトの名無しさん
:01/12/12 16:36
>>363
のソースがフツーじゃないざんす。
using namespace FOO;
using FOO::foo;
この2行のどちらかをコメントアウトしてみよ〜
365
名前:
デフォルトの名無しさん
:01/12/12 17:43
>>364
あと文法上は問題ないが、ポインタと int を引数に取る関数の多重定義はやめたほうが
身のためと思われ。
366
名前:
363
:01/12/12 17:48
>>364
うーむ、やはり両方の using 宣言を混在させることはできませんか。
これは、C++ の規格上ダメなんでしょうか。それとも VC++ 独自の
問題?
>>365
らじゃ。引数として 0 を与えたときの曖昧性のことですね。
367
名前:
デフォルトの名無しさん
:01/12/12 19:03
質問というか素朴な疑問なのですが、
関数パラメータのデフォルト値に変数が使えない理由を知りたいです。
例えばブール変数をメンバに持ったクラスでトグル用のメンバ関数を定義するとき、
気持ち的には以下のようにしたいのです。
class my_bool {
public:
bool elem;
bool toggle(const bool& b!=elem) { // (*1)
// 引数が指定されればelemを引数の値にセット
// 引数が指定されなければelemを反転した値にセット
elem = b;
return elem;
}
};
もちろんこれは(*1)のところでエラーがでます。
これが可能ならば上のような操作を簡潔に書けてハッピーなのですが、
デフォルト値に変数が使われると何かまずいことがあるのでしょうか?
368
名前:
367
:01/12/12 19:07
誤植です。正しくは(どうせ間違ってますが)
bool toggle(const bool& b=!elem) { // (*1)
でした。!=が=!
369
名前:
中学2年生
:01/12/12 21:38
>>367
最近C++を勉強し始めたばかりなので間違っていたらすみません。
引数が省略されたときの値がコンパイル時に決まっていないとコンパイラが困るからじゃないですか?。
> // 引数が指定されればelemを引数の値にセット
> // 引数が指定されなければelemを反転した値にセット
混乱しそうな仕様ですね。
370
名前:
七誌
:01/12/12 22:04
>>367
マルチポストすんなよ。馬鹿。
371
名前:
367
:01/12/12 22:20
あれ?
369辺りに
『VisualC++の質問じゃなかったですね。すみません。C++相談室に炒ってきます。』
とポストしたはずだったんですが・・・。
372
名前:
367
:01/12/12 22:25
>>369
ブール値をスイッチするtoggle()という関数のデフォルトの動作として
値を切り替える。もし値が明示的に指定されたならばその値に切り替える、
というのは感覚的には自然な気がするのですが・・・。
> 引数が省略されたときの値がコンパイル時に決まっていないと
> コンパイラが困るからじゃないですか?。
そういうもんなんでしょうか。
とりあえず今のところそういうもんだということで納得しておきます。
失礼こきましたです。
373
名前:
デフォルトの名無しさん
:01/12/13 01:05
>372
頭悪すぎ。専用にSet関数作れ。
あとパラメータ渡したときとそうでないときの動作を変えたかったら
別々のtoggle関数作れ。
374
名前:
デフォルトの名無しさん
:01/12/13 10:44
>>372
感覚的に不自然
375
名前:
デフォルトの名無しさん
:01/12/13 14:18
>>372
1つの関数に複数の機能もたせるのヤメレ
376
名前:
いっぱいいっぱい
:01/12/13 14:58
私は、VC1.0を使っています。
コンパイルしようとすると、
自動データセグメント+ヒープの大きさが64キロを越えています。
とのエラーが出ます。
どこがまずいのでしょうか?
困っています。どうかご教授ください。
377
名前:
デフォルトの名無しさん
:01/12/13 15:18
>>376
メモリモデル設定するオプションがあるはずだから、
さがして、ラージモデルとか、でかそうな名前のメモリ
モデルに変更してください。
378
名前:
デフォルトの名無しさん
:01/12/13 15:31
>>367
変数うんぬんの前に!=で代入はやめれ。
379
名前:
デフォルトの名無しさん
:01/12/13 15:43
>>378
というか、代入になってないし
コレが仮に動いたとして…
どうやって「引数が指定されているかどうか」を判断できるんだ?って問題だし
いやいや、まてまて…それ以前にconstに代入するつもりか?
まあ、
>>371
を見る限り、C++相談所に行ったよーなので この話は終りかな。
#C++ソウダンジョ…コイツノメンドウハタノンダゾ。
380
名前:
いっぱいいっぱい
:01/12/13 15:48
メモリモデルはどのようにして変更すればいいのでしょうか?
ご教授お願いします。
381
名前:
デフォルトの名無しさん
:01/12/13 15:52
>>380
1.0なんて、手元にないからわからないよ。
メニューにオプションって項目ない?
382
名前:
いっぱいいっぱい
:01/12/13 16:00
>>381
一応オプションという項目はあるのですが、その中にそれらしい
ものがないので。プロジェクト、デバッグ、ディレクトリ、エディタ、
ワークスペース、ツール、カラーという項目が入っています。
このうちのどれかにあるんでしょうか?
よろしくお願いします。
383
名前:
デフォルトの名無しさん
:01/12/13 16:14
>>382
ヘルプで、メモリモデルって検索できない?
1.0使ってたのは、何年も前だから、まったく覚えてないよ。
384
名前:
いっぱいいっぱい
:01/12/13 16:19
HELPで検索してみたんですが、<メモリ>ですらヒットしないんです。
どうにがんばってみます。ご教授ありがとうございました。
385
名前:
デフォルトの名無しさん
:01/12/13 16:31
3年ほどCをやっていて最近C++をやり始めたんですが例外処理ってなんですか?
普通に関数の返り値でエラーかどうか判別すればいいんじゃないですか?
例外をスローするメリットが分かりません。
それどころか例外を捕まえて例外を破棄(?)しないとメモリがリークするらしいのでウザイと思います。
それ以外(特にMFC)は便利だと思います。
例外をスローする関数なんて自分は絶対作りません。
以上です!
386
名前:
デフォルトの名無しさん
:01/12/13 16:32
>>384
そのころは統合環境つかってなかったから
わからないけどコンパイラのオプション指定の
辺りにないかな?後、リンカもべっこで指定
するんじゃないかな?
以上手元に無いので6.0から推測しました。
コマンドラインなら
cl -ms a.c
とか
cl -ml a.c
って指定するんだけどなぁ。
387
名前:
Kusakabe Youichi
:01/12/13 16:33
In article
>>385
, デフォルトの名無しさん/sage/385 wrote:
> 普通に関数の返り値でエラーかどうか判別すればいいんじゃないですか?
「かえりち」と読むのですか?
388
名前:
デフォルトの名無しさん
:01/12/13 16:34
>>384
メニュー「オプション」−「プロジェクト」でダイアログが出て
「コンパイラ」ボタンで、左側の「カテゴリ」にメモリモデルがある。
389
名前:
デフォルトの名無しさん
:01/12/13 16:37
>>385
ファイル操作なんかで使わない?
390
名前:
デフォルトの名無しさん
:01/12/13 16:51
>>385
のコーディング
try {
hoge1();
}
catch(...) {
エラー処理
}
try {
hoge2();
}
catch(...) {
エラー処理
}
try {
hoge3();
}
catch(...) {
エラー処理
}
391
名前:
役職名無しさん
:01/12/13 17:02
>>390
ワラタ
392
名前:
デフォルトの名無しさん
:01/12/13 17:31
Windows2000でIOポートを制御するにはどうしたらいいのでしょうか?
393
名前:
いっぱいいっぱい
:01/12/13 17:49
>>386
さん
どうもありがとうございます。
いろいろ試してみます。
>>388
さん
アドバイスありがとうございます。
ですが、私はVer1.0を使用しています。
教えてくださった通りにやってみましたが、
ダイアログの中に、「コンパイラ」が見当たりません。
394
名前:
デフォルトの名無しさん
:01/12/13 19:43
すみません。質問です。
VisualC++のSocketAPIではIPv6ってサポートしてるのでしょうか?
395
名前:
デフォルトの名無しさん
:01/12/13 20:03
>>392
DDKでドライバを書く
396
名前:
デフォルトの名無しさん
:01/12/13 20:46
>>394
http://msdn.microsoft.com/downloads/sdks/platform/tpipv6.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/portguid_2pde.asp
397
名前:
質問
:01/12/13 21:38
Win32 static libraryでプロジェクトを作った場合、MFCのクラスを使えるくせにクラスウィザードが使えないのにはどういう意味があるの?
398
名前:
394
:01/12/14 08:33
ギャー!英語だーー!!
・・・。
>>396
ありがとうございます。
・・がんばって読みます。
399
名前:
デフォルトの名無しさん
:01/12/17 16:51
APIが対応していないOSでAPIを使うプログラムを作った場合どうなりますか?
例えば GetLongPathName は Win95 に対応していませんが
Win95 で GetLongPathName を使った場合どうなりますか?
1.起動しない
2.APIのところでアプリが落ちる。
3.APIが失敗するだけ
4.その他
いずれにしろ正常に動かないわけですから Win95 では使えないとユーザーに警告する必要はあると思うのですが・・・
ユーザーのOSが分からない場合(オンラインソフトの場合)一般的にどのOSを対象にプログラムを作るべきですか?
Win95 に対応していないAPIは結構あるように見えますが Win95 ユーザーは切り捨てていいですか?
Win95 を使ってるユーザーなんて未だにいるもんですか?
400
名前:
デフォルトの名無しさん
:01/12/17 17:02
>>399
>ユーザーのOSが分からない場合(オンラインソフトの場合)一般的にどのOSを対象にプログラムを作るべきですか?
OSバージョンチェックの方法は、検索したら出てくると思うよ。
401
名前:
デフォルトの名無しさん
:01/12/17 17:10
>>399
うちのWebサーバーのログを見てると、95の人はほとんどいないみたい。
企業内で使われてるPCは95が割と残ってるという話もあるけど、
ネットからソフトを落とそうなんて人は、95は使ってないんじゃないの?
402
名前:
I'm Win95.
:01/12/18 00:26
>399
試してみた。
「欠落エクスポート KERNEL32.DLLGetLongPathNameA にリンクされています」
「システムに装着してあるデバイスは、動作していません」
うーん、合掌。
俺は、LFNに変換する時は、APIの FindFirstFileを使っている。
APIの OSごとの挙動を報告するスレみたいなの、誰か作らん?
403
名前:
デフォルトの名無しさん
:01/12/18 00:46
MSDN見ればええやん
404
名前:
デフォルトの名無しさん
:01/12/18 01:05
>403
いや、それが分からないもんだよ。
最近出くわした所では、例えば VirtualUnLockは、
Windows 95/98/Me: Included in Windows 98 and later.
となっているが、
95でも「欠落エクスポート〜」のエラーにならず、起動できてしまう。
何で Windows 98 and later なんて書くんだ yo!
そもそも、9x系はこの APIは何もしないんだから、何で Unsupported に
しないんだ yo! VirtualLockは Unsupported と書いてあるのに。
まぁ、このあたりの挙動は、システム DLLのバージョンによるところが大きいのかもね。
405
名前:
デフォルトの名無しさん
:01/12/18 14:00
しょうもない質問で申し訳ないんですが、教えていただけませんか
Win2000+ADSLの環境でIPアドレスを取得したいのですが、
LAN内のIPアドレスが返ってきてしまい、WAN側?(インターネット側)の
IPアドレスを取得することが出来ません
ご存じの方取得方法をご教授ください よろしくお願いします
406
名前:
デフォルトの名無しさん
:01/12/18 15:09
ADSLのルータがNATかましているなら外側のIPを自力では
取得できんはず。NATやめるか、外側にリフレクタを置い
てIPを知らせてもらえば?
407
名前:
405
:01/12/18 16:18
>>406
げふ... そうなんですか
その辺調べてみます ありがとう
408
名前:
デフォルトの名無しさん
:01/12/18 16:31
ルータによってはAPI公開してて、それ使ってIP取得できる場合もある。
汎用性もクソもないけど。
409
名前:
405
:01/12/18 16:39
>>408
そうなんですか 流石に汎用性が無いのは困りますね
Win2000標準のipconfig.exeを使えばちゃんと表示されるんですけど
どうやってIP引っ張ってきてるんでしょうね...
410
名前:
デフォルトの名無しさん
:01/12/18 17:15
プロセスのセキュリティ関係について、分かりやすく解説したサイト
とか、無いですかね?
セキュリティ記述子だの、ACLだの、トークンがどうのだの...
訳が分からない。
411
名前:
しいたけ
:01/12/18 23:06
win32aplicationでエディットボックスを使ってキーボードから入力された文字を
画面に文字を表示させたいのですがエディットボックスを作るプログラムがわかり
ません。msdnコレクションを見たりもしてるんですが、何が何だかさっぱりわかり
ません(T_T)わかる人がいたら教えてくださ〜い。
412
名前:
デフォルトの名無しさん
:01/12/19 05:12
VC6付属のfstreamの挙動でわからないところがあるので、教えてください。
まず、ソースは以下です(test.cpp, test.exe とします)。
#include <iostream>
#include <fstream>
using namespace std;
int main(int c, char **v) {
istream *in = new ifstream(v[1]);
int ch;
int count = 0;
for(ch = in->get(); !in->eof(); ch = in->get()) {
count++;
if (count == 50) {
cerr << in->tellg() << endl;
count = 0;
}
cout << (char)ch;
}
return 0;
}
また、以下の内容のファイルを作って
*** 改行コードを LF にして ***
保存しておきます(in.txtとします)。
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
dddddddddd
eeeeeeeeee
ffffffffff
hhhhhhhhhh
iiiiiiiiii
jjjjjjjjjj
kkkkkkkkkk
413
名前:
412続き
:01/12/19 05:13
で、
$ test.exe in.txt 1>sout.txt 2>serr.txt
とすると、sout.txtは、
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
dddddddddd
eeeeeeeeeeeeeeee
ffffffffff
gggggggggg
hhhhhhhhhh
iiiiiiiiiiii
jjjjjjjjjj
となっていました。
予定では in.txt と sout.txt の内容は同じになるはずだったのです。
in->tellg()の行をコメントアウトすれば、期待通りの動作をします。また、
in.txtの改行コードを CRLF にしても期待通りの動作です。
デバッガでみたところ、tellg()によってなぜかファイルポインタが少し前のところに
戻っているようです。
また、VC付属のものの代わりにSTLPortを使ったところ、tellg()の有無に
関わらず期待通りの動作をします。
これは使い方が悪いのでしょうか?それともVC付属のライブラリのバグ
ですか?
414
名前:
デフォルトの名無しさん
:01/12/19 10:13
ダイアログバーにリストボックスを埋め込もうとしているのですが、リストボックスのメンバ変数の取り方がわかりません。
ダイアログバーではDoDataExchangeは呼ばれないんですよね?
どうすればいいのでしょうか?
415
名前:
デフォルトの名無しさん
:01/12/19 13:52
厨房の質問です。
GUIなど使っていないプログラムで、ReleaseとDebugでコンパイルした
場合に挙動が違うんですが、同じプログラム書いていて挙動が違くなる
原因って一般的にはどんなことがあるんでしょうか。。。
宜しくお願いします。
416
名前:
デフォルトの名無しさん
:01/12/19 14:04
>>415
GUI なアプリでも同じこと。
たとえばメモリを初期化せずに使っているとか、
解放したあと、まだそのメモリを参照してしまっている…とか、
まぁ、いろいろあるよな。
417
名前:
415
:01/12/19 14:07
>>416
デバッグ版だと初期化すべきところでしてなくても、
勝手に初期化してくれる(配列を零で初期化してくれるとか)ということが
あるということですか?
418
名前:
デフォルトの名無しさん
:01/12/19 14:10
>>415
初期化してない変数を使った。
ReleaseとDebugでごみの値は違うことが多い。
419
名前:
デフォルトの名無しさん
:01/12/19 14:11
>>417
初期化しない変数は、何が入ってるかわからない。
DebugとReleaseで入っている値が違うということ。
420
名前:
415
:01/12/19 14:14
>>418
>>419
なるほど。デバッグ版で動いているのはたまたまってことですね。
白み潰しに見てみます。ありがとございましたー。
421
名前:
デフォルトの名無しさん
:01/12/19 14:20
ワラタ
どうでもいいがモノスゴイ被り様だな。
422
名前:
デフォルトの名無しさん
:01/12/19 21:47
#ifdef _DEBUG
for(i=0 ; i<num ; i++)
{
if(item[i] == 0)
{
MessageBox(hwnd , "バグってるぞ!" , "オラオラオラ!!" , MB_OK);
}
}
#endif
といった具合にプリプロセッサでデバッグモードのときだけエラーを表示させているんですが
#ifdef _DEBUG の部分を "_" を書き忘れて #ifdef DEBUG とかやっててリリースモードで実行中に
メッセージボックスがでてビビリまくりな時があります。
#ifdef _DEBUG の記述を間違えてもコンパイラはエラーを出さないため
逆に恥ずかしいバグを発生してしまうことがあります。
#ifdef _DEBUG を間違わずに書く方法ってないですか?
デバッグモードの時だけコードが有効になって記述ミスした場合コンパイルでエラーか警告が出るようなやり方希望です。
423
名前:
デフォルトの名無しさん
:01/12/19 22:06
>>422
VC++なら、TRACEマクロ使えば良いでそ
424
名前:
:01/12/19 23:41
人の作ったプログラムを改造しているのですが
スタティックテキストのくぼみが、スクリーンセーバー解除後に
消えてしまいます。他のWINDOWで一度遮ってやると復活します。
FillSolidRect等を使って背景を描画しているみたいなのですが、
何が考えられるでしょうか。
425
名前:
デフォルトの名無しさん
:01/12/20 08:34
>422
usertype.datに_DEBUGなどのキーワードをを登録しておくという方法はなかなか有効だったりする。
ただしやりすぎるとdatが1万行を軽く越えるけど。
426
名前:
デフォルトの名無しさん
:01/12/20 08:58
>>422
const bool DEBUG = TRUE;
//...
if(DEBUG)
{
HOGE();
}
みたいなのをプログラミング作法では推奨してたな。
427
名前:
デフォルトの名無しさん
:01/12/20 09:20
これってreleaseでfalse時には、きれいさっぱり無くなってくれるの?
428
名前:
デフォルトの名無しさん
:01/12/20 09:30
>>427
VC++6では、最適化で削ってくれる。
他のコンパイラでも、このくらいやってくれると思う。
429
名前:
デフォルトの名無しさん
:01/12/20 09:30
#ifdef _DEBUG
じゃなくって
#if _DEBUG
にでもすれば?
430
名前:
デフォルトの名無しさん
:01/12/20 11:54
当方初心者です。
EDITViewを基本クラスにして、メニューバーから
選択してFromViewを開く方法がわかりません。
プロジェクト追加しないといけないのですか?
431
名前:
デフォルトの名無しさん
:01/12/20 12:53
>>430
??FromViewってなんだ?何かの派生クラスか?
432
名前:
デフォルトの名無しさん
:01/12/20 14:53
>431
CFormViewでしょう。
433
名前:
431
:01/12/20 15:16
>>430
ダイアログボックスじゃ駄目なのか?
434
名前:
430
:01/12/20 17:27
あ、ごめんなさい。CFormViewですね。
まだ先頭にCをつける癖すらついていません。
あれからいろいろやってみて、ダイアログボックス
なら開いた。という状態に持ってこれたのですが、
ダイアログボックスのID_EDITに入力された内容を
ボタンを押して、親ウィンドウに反映されるには
どのようにしたらよろしいのですか?
一部表現が変ですけど、ご容赦ください。
435
名前:
万年カレンダー
:01/12/20 22:56
年と月を入力するとカレンダーが出てくる予定です
y:年、m:月、d:出力する日付、n:マスの番号、l:最後の日
#include<stdio.h>
void main()
{
int y,m,d=1,w,n=1,l;
printf("年=");
scanf("%d",&y);
printf("月=");
scanf("%d",&m);
printf("[ %d年%d月 ]\n",y,m);
printf(" 日 月 火 水 木 金 土\n");
printf("---------------------\n");
if(m==1 || m==2){
y--;
m=m+12;
}
w=(y+y/4-y/100+y/400+(13*m+8)/5+d)%7;
if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12){
l=31;
}
else if(m==4 || m==6 || m==9 || m==11){
l=30;
}
else{
if(y%4==0 && y%100!=0){
l=29;
}
else if(y%400==0){
l=29;
}
else{
l=28;
}
}
for(w;w
>0
;w--){
printf(" ");
n++;
}
for(d;d<l+1;d++){
printf("%3d",d);
if(n%7==0){
printf("\n");
}
n++;
}
printf("\n");
}
閏年の判定がおかしい
else-ifもうまくいかない
436
名前:
デフォルトの名無しさん
:01/12/21 12:45
いや〜_allocaって便利ですね。
スタックからメモリを確保するのでメモリが断片化することなく嬉ピーです。
関数内で可変長のメモリが必要なときに重宝しております。
437
名前:
デフォルトの名無しさん
:01/12/21 13:32
>>434
ID_EDITってのはエディットボックスのIDか?
そうなら、そのIDとCEditあたりを対応させて、入力された内容を拾えばよろしい。
438
名前:
デフォルトの名無しさん
:01/12/21 13:48
if (y % 4) {
l = 28;
} else if ((y % 100) != 0 || (y % 400) == 0) {
l = 29;
} else {
l = 28
}
439
名前:
Kusakabe Youichi
:01/12/21 14:00
In article
>>438
, デフォルトの名無しさん/438 wrote:
> if (y % 4) {
> l = 28;
> } else if ((y % 100) != 0 || (y % 400) == 0) {
> l = 29;
> } else {
> l = 28
> }
28と29の2種類しかないのだから、2つに場合わけするか
もしくは4つにわけるかのほうが素直な書き方ですよね。
440
名前:
万年カレンダー
:01/12/21 14:07
判定部分のyをy+1に書き換えたらちゃんと動いたYO!
>>438
ifの条件式って0と1以外でもいいの?
441
名前:
デフォルトの名無しさん
:01/12/21 14:10
>>440
0と比較できればなんでもおげ
442
名前:
万年カレンダー
:01/12/21 14:20
if(m==1 || m==2){
y--; ←これが原因だったみたい
m=m+12;
}
何度も修正してると
どんどんリソースが減っていくのはなぜ?
>>441
なる
443
名前:
デフォルトの名無しさん
:01/12/21 15:00
m==1じゃなくてm==13ね
444
名前:
デフォルトの名無しさん
:01/12/21 15:01
こういうことにならないように、その月の1日の曜日を求める関数とかを作るわけだ。
445
名前:
デフォルトの名無しさん
:01/12/21 15:03
こんいちは。
Cで書かれたプログラムをC++のプログラムから呼ぼうとしていますが
できません。Cのソースは10年前くらいのもので、VCを使って
コンパイルしてオブジェクトファイルを作りました。それを呼ぶ
メインがあるファイルを*.cにするとエラーなしで、*.cppにすると
LNK2001の未解決なんたらが出てリンクができません。拡張子が
違うだけで中身はまったく一緒です。どうしたら
いいでしょう?
446
名前:
デフォルトの名無しさん
:01/12/21 15:15
>>445
C++のリンケージについて勉強する。
447
名前:
デフォルトの名無しさん
:01/12/21 15:16
extern "C"
だっけ?
448
名前:
デフォルトの名無しさん
:01/12/21 15:47
それ書きました。Cのヘッダファイルに。
>>447
でもだめでした。。C++のメインの方では
何かすることありますか?
449
名前:
デフォルトの名無しさん
:01/12/21 16:17
ん〜でも今テストしててCで書かれた関数はコメントアウトして
あるんですが・・ヘッダに定義されてる変数を使おうとしただけで
だめなんです。おかしくないですか?
450
名前:
デフォルトの名無しさん
:01/12/21 16:19
あっできた
451
名前:
デフォルトの名無しさん
:01/12/21 16:21
をろ?
なにが悪かった?
452
名前:
412
:01/12/21 16:49
>>412
の件ですが、ソースをみたところ、テキストモードで開くことを
想定しているのはCRLFなファイルだけみたいでした。ftell()が場所を
計算するときに、LFがあると、それは問答無用でCRLFからLFに変換
されたものだとみなされて、2バイト分として扱われていました。
STLPortと挙動が違うのは、VCのほうではpubseekoff()がtellg()のなかで
つかわれていたためでした。
では逝ってきます。
453
名前:
デフォルトの名無しさん
:01/12/21 16:55
C++のメインの方でCのヘッダをインクルードしているところを
extern "C"{}で囲ってみました。
最初はCのヘッダファイルのほうで定義を同じもので囲ってました。
454
名前:
:01/12/21 23:04
HANDLE hWave=NULL;
hWave=LoadResource(AfxGetResourceHandle(),
FindResource(AfxGetResourceHandle(),
MAKEINTRESOURCE(name),"WAVE"));
LPSTR lpData=(LPSTR) LockResource(hWave);
sndPlaySound(lpData,SND_MEMORY|SND_ASYNC);
UnlockResource(hWave);
FreeResource(hWave);
SND_ASYNC;
SND_LOOP;
のようにしてWAVEファイルを今まで再生していました。これは、リソースに読み込んで(WAVEファイルを)使っていたんですが、
外部のWAVEファイルを、ファイル名を指定する形で用いることはできるのですか?
455
名前:
デフォルトの名無しさん
:01/12/21 23:08
>>454
PlaySound()
456
名前:
デフォルトの名無しさん
:01/12/22 00:26
XPに対応してますか?VisualC++6.0
457
名前:
( _ 。。) _ バタ。
◆lUd9keO2
:01/12/22 01:16
>>456
なんとか。 というか、 NT5.2 (だっけ) だから 2000 ベースで考えていいかと。
458
名前:
デフォルトの名無しさん
:01/12/22 01:30
>>457
ありがとう。ちなみに7.0はいつ?
459
名前:
デフォルトの名無しさん
:01/12/22 01:49
>>457
Windows 2000 == Windows NT 5.0
Windows xp == Windows NT 5.1
98 と 98SE 程度の違いだ。
>>458
英語版はもうそろそろらしい。
日本語版は一月か二月遅れるだろ。
でも、7.0 から C# がメインになりそうな感じだし、
VC++7.0 ってあんまり意味ないかも。
460
名前:
デフォルトの名無しさん
:01/12/22 03:17
VC++/C# Ver7.0 そのつぎは、やっぱ C# Ver1.0 ?
461
名前:
( _ 。。) _ バタ。
◆lUd9keO2
:01/12/22 11:47
>>459
あ。 5.1だったか、 フォローサンクス。
>>459
この手の開発系アプリケーションって…
ちゃんとしたヴァージョンアップが5〜6あたりまで続いた後は…
1:無駄な贅肉がついていく(80%)
2:ほとんど変化が無い(30%)
3:まだまだ頑張っている(10%)
のうちのどれかになるよな……。 こぽこぽ。
462
名前:
デフォルトの名無しさん
:01/12/22 12:15
人はそれを安定期と呼ぶ。
正直言ってVC++は5.0で実用上全く問題ないレベルなんで、そんなに頑張って
更新しなくてもいいかと。いまだに5.0の人多いし。
463
名前:
デフォルトの名無しさん
:01/12/22 14:53
IDEの強化とコンパイラのtemplate対応強化を希望したいところなんだけど。
464
名前:
デフォルトの名無しさん
:01/12/22 17:59
ISO標準C++を完全に満たしてから安定期に入ってくれぃ
465
名前:
デフォルトの名無しさん
:01/12/22 20:04
>>462
> 正直言ってVC++は5.0で実用上全く問題ないレベル
ARM の頃のテクニックしか使わないと問題ないんだが template 使うと辛いこと多いんだよな。個人的
に困ってることを列挙。
1 partial specialization が使い物にならない。
template <typename T, bool Threaded> Allocator {};
template <typename T, true> Allocator {};
template <typename T, false> Allocator {};
とか書きたいことが、しばしば。
あと引数の数を可変にした template メソッドを書く方法もあるんだが、これも parial specialization
が使えないと実装できん。
2 foo<int>(), foo<float>() を呼び分けられない。
3 template<int N> struct X { int n[N]; }; が「要素数 0 の配列を定義している」と怒られて、コンパイル
が通らないケースがある(もちろん N に 1 以上の数を渡してる)。どうもテンプレート化するタイミング
に依存するみたいで、通ることもある。とりあえず n[N + 1] にしておけば回避できる。
4 void 型の関数で return (void型関数) とやると、コンパイルエラーになる。このため std::mem_fun_t()
が void 型のメソッドでは使いものにならない。
466
名前:
:01/12/23 06:02
virtual long __stdcall IOleWindow::GetWindow(struct HWND__ * *)" (?GetWindow@IOleWindow@@UAGJPAPAUHWND__@@@Z)" は未解決です
Debug/VCapture.dll : fatal error LNK1120: 外部参照 1 が未解決です。
ってどのライブラリにリンクすりゃいいかなんてどこで調べるんだい?
467
名前:
デフォルトの名無しさん
:01/12/23 07:17
msdn
468
名前:
デフォルトの名無しさん
:01/12/23 07:53
なんで、IOleWindowの参照を、COMではなくてリンカが解決しようとするんだろう‥‥?
469
名前:
デフォルトの名無しさん
:01/12/23 13:42
#undef _PURE
とか
470
名前:
デフォルトの名無しさん
:01/12/23 19:45
ダイアログベースで作成して、これにリソースエディタでメニューをつけました。
これを実行してみたらメニューのところだけへこんでるのですが
他のところと高さを合わせるようにできませんか?
471
名前:
デフォルトの名無しさん
:01/12/24 02:32
えくすきゅうすみぃ、ソースで読み込みたいライブラリ指定する方法が思い出せず、探しても見つかりません。たすけてくだされ
472
名前:
デフォルトの名無しさん
:01/12/24 03:02
#pragma comment(lib,"hoge.lib")
473
名前:
471
:01/12/24 22:46
ありがとうございますだ。
474
名前:
デフォルトの名無しさん
:01/12/24 23:07
gogoをコンパイルしようとすると、
c:\windows\system32\cmd.exe の実行エラー
って怒られるんですけど、何でシステムファイルの実行エラー?
OSはWin XP使ってます。
475
名前:
あ
:01/12/25 05:54
ある構造体の中の様々な変数などに、外部のファイルから読み込んで初期値を与える、というようなことをしたいのですが、
どのようにするのが最も簡単でしょうか?
476
名前:
:01/12/25 06:01
SetTimer(NULL,MYID,wait,My_TIMER_PROC);
でさ、コールバック関数(static)内でthisポインタ使いたいんだけど、
パラメータでthis渡せないよね。
どうしたらいいっすかね?
477
名前:
デフォルトの名無しさん
:01/12/25 07:08
>>475
fread(buf,sizeof(構造体),1,fp);
>>476
staticメソッドにthisはねえよ。パラメータで渡しとけ。
478
名前:
デフォルトの名無しさん
:01/12/25 07:23
>>477
だから、TimerProcにパラメータ渡す方法がねぇってんだろが。
ウィンドウに属さないタイマーの場合、Timerprocが属してるclassを
singleton化してstaticメンバにthis保存するぐらいしか思いつかん。
479
名前:
デフォルトの名無しさん
:01/12/25 07:44
つーかコールバックするならマルチメディアタイマ使えば?
480
名前:
デフォルトの名無しさん
:01/12/25 07:57
>>478
nIDEvent(SetTimerの2番目の引数)で渡せるっぽい。
SetTimer(NULL,(UINT)this,1000,(TIMERPROC)TimerProc);
とかみたく。
481
名前:
デフォルトの名無しさん
:01/12/25 08:18
MFCを使って、中が透明な円を書きたいのですが。
どうしても塗りつぶされてしまいます。どうしたらいでしょうか?
482
名前:
デフォルトの名無しさん
:01/12/25 09:12
>>481
SetBkMode(TRANSPARENT)とかでできんか?
知らんが。
483
名前:
デフォルトの名無しさん
:01/12/25 09:18
黒く塗れ!!
484
名前:
デフォルトの名無しさん
:01/12/25 09:45
>481
SelectObject(GetStockObject(HOLLOW_BRUSH))
485
名前:
デフォルトの名無しさん
:01/12/25 11:47
>>481
MFCなら CDC::SelectStockObject(NULL_BRUSH) を呼んでから円を描け
486
名前:
デフォルトの名無しさん
:01/12/25 11:57
>>482
>>484
>>485
ありがとうございました。
487
名前:
教えて君
:01/12/25 16:34
CViewベースで作成して、メニュー欄からダイアログを
開いて、そのダイアログのエディット欄に入力された情報を
OKボタンが押されたときに、View側に反映させたいのですけど、
CXXXDoc.cppに
CXXXDlg dlg;
if(dlg.Create()==IDOK){
m_CurLett=dlg.m_text;
}
と入力した後、
CXXXDoc.hに
// アトリビュート
public:
CString m_CurLett;
と入力してm_CurLettに値を入れるところまで行ったんですけど、
この値をView側に表示させる方法が分かりません。
お願いします。この後どうすれば良いのか教えてください。
488
名前:
デフォルトの名無しさん
:01/12/25 16:53
InvalidateRectして、WM_PAINTのハンドラでTextOutしてください。
489
名前:
デフォルトの名無しさん
:01/12/25 23:47
質問です。
アクティブなIEが見ているURLを得る方法って有りますか?
490
名前:
デフォルトの名無しさん
:01/12/26 00:14
>>489
やったことないけど Browser Helper Objects 書けば出来そう。MSDN Library に解説があります。
491
名前:
デフォルトの名無しさん
:01/12/26 03:04
Google Toolbarみたいな独自のツールバーを作るにはどうしたらええんかのう
492
名前:
デフォルトの名無しさん
:01/12/26 04:16
>>491
最近 ATL ML で紹介されてた。
http://www.cheztabor.com/toolband/
493
名前:
デフォルトの名無しさん
:01/12/26 11:52
MFCとSDK、どちらでプログラム書いている人が多いですか?
最初は入門って事でMFC使ってましたが、ゲームのプログラムとかを
作っていると、MFCでは重くて使い物にならないことが分かってきました。
配布するときも、ライブラリ依存になってしまうし......
最近では、SDKばっかりです。皆さんはどうでしょうか?
494
名前:
デフォルトの名無しさん
:01/12/26 13:34
>>493
SDKってWin32APIのことでいいのか?
VCは趣味でゲーム作るくらいだから俺はAPIオンリー。
MFCもそのうちやろうかと思ってはいるが、あまりいい話聞かないし、
普通のアプリ作る予定もないから今のところ永久に保留中。
495
名前:
デフォルトの名無しさん
:01/12/26 13:49
>>493
>配布するときも、ライブラリ依存になってしまうし......
「ライブラリ」ってどれのことだろう。
496
名前:
デフォルトの名無しさん
:01/12/26 13:51
入門ならSDKじゃないの?
俺と順番が逆だ。
497
名前:
デフォルトの名無しさん
:01/12/26 14:05
WinInetを使用してFTPクライアントを作っています。
パーミッションの取得・変更ってどうやるんですか?
ソケットレベルで自分で書かないと無理ですか?
498
名前:
デフォルトの名無しさん
:01/12/26 15:00
VB経験者なら、MFCの方が理解しやすいかも・・・
499
名前:
デフォルトの名無しさん
:01/12/26 15:31
>>493
個人で書いてるプログラムには ATL/WTL 使ってます。
ATL/WTL はMFC よりも機能的に劣る部分もありますが「API の薄いラッパクラス」という感じで、
ゲームなどを作る場合には向いてると思います。テンプレートライブラリだから DLL の類も不要
ですし。
(唯一の問題は解説が少ないことか。規模が小さいライブラリだからソース読めば良いんだけど)
500
名前:
デフォルトの名無しさん
:01/12/26 16:07
指定したディレクトリの全ファイル名を取得する方法を教えてください。
SearchPathを使ってやりましたがうまくいきません。
よろしくお願いします
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.