[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/09 10:44 / Filesize : 111 KB / Number-of Response : 467
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【漏れは】猫でもわかる質問スレ【猫以下です】



1 名前:デフォルトの名無しさん mailto:sage [03/06/05 20:40]
初心者にはやっぱり難しいWindowsプログラミング。
そこでこの本を買った人も多いのではないでしょうか。
それでもわからない事がたくさんある!
そんな時はここで質問しましょう。

本家サイト
ttp://www.kumei.ne.jp/c_lang/index.html

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

448 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 21:04:33 ]
>>448
24ビットカラーは各色8bitだから256*256*256だぞ・・・128ビットって各色4ビットで12bitになっちまうじゃねーか・・・


450 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 01:01:19 ]
>>450
0x3Fって後カラから気がついて問題そこじゃないからいっかと。

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

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


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

455 名前:デフォルトの名無しさん [2009/09/19(土) 14:39:54 ]
おねがいします



456 名前:ぅゅ ◆e6.oHu1j.o mailto:sage [2009/09/19(土) 14:45:46 ]
ソースうp
第二版にはタイピングゲームは載っていない

457 名前:454 mailto:sage [2009/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 mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 15:23:52 ]
書籍に乗ってるソースコードの転載はまずいだろ

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

462 名前:ぅゅ ◆e6.oHu1j.o mailto:sage [2009/09/19(土) 16:22:32 ]
何事もなく動いた
www.geocities.jp/c_zelos/file_up2/nekotype.cpp

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


465 名前:ぅゅ ◆e6.oHu1j.o mailto:sage [2009/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 mailto:sage [2009/09/21(月) 18:53:17 ]
>>464
無事できました!ありがとうございます

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






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<111KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef