【漏れは】猫でもわか ..
[2ch|▼Menu]
431:デフォルトの名無しさん
09/03/04 19:18:36
>>430
はい。

432:デフォルトの名無しさん
09/03/04 19:30:01
>>426
少なくともVC++2008じゃ行けんかったぞ


vip1134975.cpp(109) : error C2664: 'DrawTextExW' : 2 番目の引数を 'LPCTSTR' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
要は型の不一致

噛み砕いて言うと関数(この場合DrawTextExW)が
2番目に欲しい変数(LPWSTR型)とは異なるもの(LPCTSTR型)を与えてるから

ちなみにソースではDrawTextExと書いてるけど、その記述をたどると
#define DrawTextEx DrawTextExW
とあり、つまりは DrawTextEx == DrawTextExW

433:425
09/03/04 20:29:17
>>432
ありゃ、つまりDrawTextExを使う場合はLPCTSTRじゃなくてLPWSTR
を使わないとダメってことですか。
んじゃあ本の方が間違っていて、おまけで付いて来たソースの方が合っていたってことで
いいんでしょうか?

434:デフォルトの名無しさん
09/03/04 21:24:39
>>433
本は持っとらんからなんとも言えん

435:デフォルトの名無しさん
09/03/04 22:33:14
プロジェクトのプロパティからマルチバイト文字を使う設定を選べ。

あるいは、説明になっていないような気がするWeb上の説明。
URLリンク(www.kumei.ne.jp)

436:425
09/03/04 22:47:13
DrawTextExの定義をよく見てみたしたところ、
2番目の引数はLPTSTR で宣言されていまして、
LPTSTR で値を渡さないといけないのにLPCTSTR で渡しちゃってたのが原因みたいです。

まだウィンドウズプログラミングは始めたばっかりなので
どっか抜かしたりタイプミスしたのが原因かもしれないんで断定は出来ないんですけれども
たぶんそれで合っていると思います。

>>435
ありがとうございます。
でも、それをやっても同じエラーが表示されるだけで効果はありませんでした。

437:デフォルトの名無しさん
09/03/06 15:00:03
うお、本当だ。この手のconst付きだろ常考な引数はCreateProcess系だけだと思っていた。

438:デフォルトの名無しさん
09/03/18 07:28:45
iniファイルの読み書きをしようと思ってKeyに対応する文字列を拾う処理で
詰まり、下にあげる虎の巻を参考にしているのですが、EXEと同じディレクトリ
に読み込みたいiniファイルがある場合はどうしたらいいですか?相対パスとい
うのでしょうか?

完全手詰まりです。

OS:WindowsVistaHomePremium
IDE:VisualStudioExpress2008
言語:C++

参考サイト::URLリンク(candy.zapto.org)

439:デフォルトの名無しさん
09/03/18 07:48:15
おながいします。

440:デフォルトの名無しさん
09/03/18 11:56:54
>>438
#include <mbstring.h>
...
TCHAR szIniFile[MAX_PATH];
LPTSTR pch;
GetModuleFileName(NULL, szIniFile, MAX_PATH);
pch = _mbsrchr(szIniFile, '\\');
lstrcpy(pch, "\\file.ini");
GetPrivateProfileString(..., szIniFile);

441:デフォルトの名無しさん
09/03/18 12:46:20
>>440
ありがとうございます。試してみます。

442:デフォルトの名無しさん
09/03/18 13:29:04
>>440
_mbsrchrより_tcsrchrにしろよ。
URLリンク(msdn.microsoft.com)

自分ならlstrcpyより_tcscpyにするけど、そこはさすがに好みの問題。

443:デフォルトの名無しさん
09/03/18 19:49:12
OE6の重複メールを削除しようと
URLリンク(questionbox.jp.msn.com)
を参考にして実行してみたのですが、うまくいかず、
デスクトップや開いているフォルダ、
また起動中のアプリに対して勝手な操作がしばらくの間行われてしまい、
少なくとも起動中のタスクのいくつかは終了してしまうなど、
思わぬ事態に陥ってしまいました。

Ctrl+Alt+Delでwscript.exeを停止しOS再起動して動作は止まったのですが、
起動中だったアプリが取り扱っていたデータが書き換えられて上書きされていないか?
また、何かファイルが操作、削除されてしまったりはしていないか、非常に不安です。

このVBSが具体的にどういう挙動をするものなのか教えてください。

444:デフォルトの名無しさん
09/03/18 21:00:59
>>443
鼬害

445:デフォルトの名無しさん
09/03/20 12:28:04
>>443
ウイルス板に池

446:デフォルトの名無しさん
09/05/10 14:40:37
ちょw

447:デフォルトの名無しさん
09/09/04 19:20:09
24ビットカラーのBMPを16ビットカラーに減色するプログラムを書いていたのですが
24ビットカラーBMPの各色を取ってB&0x1F、G&0x2F、R&1Fをあてて各色を減色し
R<<11 | G<<5 |Bっていった感じに繋げてみたのですがどうにもうまくいきません。
何か参考になるサイトや書籍、ヒント等いただけないでしょうか・・・。

448:デフォルトの名無しさん
09/09/04 20:57:02
>447
> 24ビットカラーBMPの各色を取ってB&0x1F、G&0x2F、R&1Fをあてて各色を減色し
本当にこの通りなら減色してなくね?
128, 128, 128 を 5 bit, 6 bit, 5 bit に縮めるなら 16, 32, 16 になるべきだと思わないかい?
今だと 0, 0, 0 になるよ?
単純にやるにしてもマスクじゃなくてビットシフトだと思う。

減色自体は画像処理定番だからぐぐれば腐るほどヒットすると思うが。

449:デフォルトの名無しさん
09/09/04 21:04:33
>>448
24ビットカラーは各色8bitだから256*256*256だぞ・・・128ビットって各色4ビットで12bitになっちまうじゃねーか・・・


450:デフォルトの名無しさん
09/09/04 23:38:14
> B&0x1F、G&0x2F、R&1F
ちょ・・・ったく、もう。

たとえば赤を例にとって
8びっと=0〜255
5びっと=0〜31

0〜255の値を取りうる数値を単純に31で頭打ちしちゃダメだろ。
R=R×32÷256
つまり0.125倍に圧縮しなきゃダメだろ。頭打ちじゃ無くて圧縮ね!
インチをミリにしたり、ポンドをグラムにしたりするのと考え方は同じだよ〜

緑は6びっとだから後は自分で考えろ。
あと、G&0x2F も間違ってる。もういっぺん2進数、16進数を最初から勉強しなおせ。
これじゃ自転車に乗れないのにバイクの免許を取ろうとしてるのと同じ。無謀だよ。

451:デフォルトの名無しさん
09/09/05 01:01:19
>>450
0x3Fって後カラから気がついて問題そこじゃないからいっかと。

452:デフォルトの名無しさん
09/09/05 01:36:11
>>450
知り合いに、自転車乗れないベテランライダーがいるぞ。
自分で漕ぐときの動的バランス感覚がないらしい。

453:デフォルトの名無しさん
09/09/07 12:51:18
>>447
下位のビットじゃなくて上位のビットを使おう
R >>= 3; G >>= 2; B >>= 3;
R<<11 | G<<5 | B;


454:デフォルトの名無しさん
09/09/19 00:11:40
猫でもわかるWindowsプログラミング第3版の5.2タイピングソフトのプログラムって、
本の通り書くと「タイプミス!」にならないんですが、これは本が間違ってるんでしょうか?
もし間違えているなら、どこが間違っているのか教えていただけると助かります。

455:デフォルトの名無しさん
09/09/19 14:39:54
おねがいします

456:ぅゅ ◆e6.oHu1j.o
09/09/19 14:45:46
ソースうp
第二版にはタイピングゲームは載っていない

457:454
09/09/19 15:20:24
ウィンドウプロージャ部のみですが、
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
HDC hdc;
PAINTSTRUCT ps;
MMTIME mm;
switch (msg) {
case WM_CREATE:
srand((unsigned)time(NULL));
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 0, 0, szMondai, lstrlen(szMondai));
TextOut(hdc, 0, 40, szInput, lstrlen(szInput));
if(bSeikai)
SetTextColor(hdc, RGB(0,0,0));
else
SetTextColor(hdc, RGB(255,0,0));
TextOut(hdc,0,80,szCheck,lstrlen(szCheck));
EndPaint(hWnd, &ps);
break;


458:454
09/09/19 15:21:05
case WM_CHAR:
if(wp == VK_SPACE && !bStart) {
bStart = TRUE;
TypeStart(hWnd);
break;
}
if(bStart == FALSE)
return DefWindowProc(hWnd, msg, wp, lp);
if(wp == VK_ESCAPE) {
lstrcpy(szMondai, TEXT(""));
lstrcpy(szInput, TEXT(""));
lstrcpy(szCheck, TEXT(""));
InvalidateRect(hWnd, NULL, TRUE);
bStart = FALSE;
break;
}
wsprintf(szInput, TEXT("あなたの入力=\"%c\""), (int)wp);
if(szMondai[6] == szInput[14]) {
bSeikai = TRUE;
mm.wType = TIME_MS;
timeGetSystemTime(&mm, sizeof(MMTIME));
dwEnd = mm.u.ms;
wsprintf(szCheck, TEXT("反応時間[%dミリ秒]"),
dwEnd - dwStart);
TypeStart(hWnd);
} else {
bSeikai = FALSE;
MessageBeep(MB_OK);
lstrcpy(szCheck, TEXT("タイプミス!"));
}
InvalidateRect(hWnd, NULL, TRUE);
break;

459:デフォルトの名無しさん
09/09/19 15:21:46
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, msg, wp,lp));
}
return 0;
}
int TypeStart(HWND hWnd)
{
int n;
MMTIME mm;

n = rand() % 26;
wsprintf(szMondai, TEXT("問題=\"%c\""), 'a' + n);
mm.wType = TIME_MS;
timeGetSystemTime(&mm, sizeof(MMTIME));
dwStart = mm.u.ms;
InvalidateRect(hWnd, NULL, TRUE);
return 0;
}

460:デフォルトの名無しさん
09/09/19 15:23:52
書籍に乗ってるソースコードの転載はまずいだろ

461:デフォルトの名無しさん
09/09/19 15:44:38
流れからいって微妙w

462:ぅゅ ◆e6.oHu1j.o
09/09/19 16:22:32
何事もなく動いた
URLリンク(www.geocities.jp)

463:ぅゅ ◆e6.oHu1j.o
09/09/19 16:40:06
追記: 
 もしかしたら
 動かないんじゃなくて、スペースキーー押して開始させてないんじゃね(と思った

90行目あたりの
case WM_CHAR:
 if(wp == VK_SPACE && !bStart) {
  bStart = TRUE;
  TypeStart(hWnd);
  break;
 }
 if(bStart == FALSE)
  return DefWindowProc(hWnd, msg, wp, lp);
これ
プログラム起動したらまずスペースキー押して bStart == TUREにしておかないと
  return DefWindowProc(hWnd, msg, wp, lp);
が実行されてそれ以下の処理が通らなくなってる

464:デフォルトの名無しさん
09/09/20 00:27:05
>>462
そのままコピペしてやってみたんですが、動きませんでした。
#include<time.h>などを追加してエラーなくしてみましたが、
ウィンドウにszMondai、szInput、赤字でszCheckと表示され、
スペースを押すと問題があるので終了しますとなって終了してしまいました。
>>463
スペースキー押しての開始はもちろんしてますよ。
ただ、間違えたキーを押してもタイプミス!がでないんですよね・・・
デバッグしてもif文の分岐で、間違えたときもelse(タイプミス!と表示される)の方にいかないんです。


465:ぅゅ ◆e6.oHu1j.o
09/09/20 07:57:39
>>464
悪い、俺のソースは変数宣言を間違っていた
char * szMondai = "szMondai";
char * szInput = "szInput";
char * szCheck = "szCheck";

char szMondai[256];
char szInput[256];
char szCheck[256];
にすれば動く

466:454
09/09/21 18:53:17
>>464
無事できました!ありがとうございます

どうやら原因は文字セットがUnicodeになっていたせいみたいでした。
マルチバイト文字セットを使ったら上手くいきました。


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5400日前に更新/111 KB
担当:undef