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


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

Win32API質問箱 Build24
251 名前:デフォルトの名無しさん :04/11/06 23:00:10
>>250
>詳細がのっているところはありませんか?
MSDN

252 名前:デフォルトの名無しさん :04/11/06 23:00:42
>>228
SetLayeredWindowAttributes

253 名前:デフォルトの名無しさん :04/11/06 23:06:28
すいません、SzFindLastChを使って、拡張子を調べてみようと思ったのですが、
この関数を使うと「デフォルトのメールクライアントが設定されていないか〜」と、
なぜかOutlookを起動するように促すメッセージが出てきます。
ここだけコメントアウトすると何も無いので、この関数に間違い無いと思います。
英語のページしかなかったので、自力でヘッダファイルを探して、mapiutil.hに宣言があったのでincludeしたのですが、これが問題なんでしょうか…
言語は、C++(をC言語として利用)で、テストに数値を書き出している段階なのでWinMainではなくmain関数から実行しています

因みに、メーラーはAl-Mailを使っていて、OEは使ってません

254 名前:デフォルトの名無しさん :04/11/06 23:07:32
単純に四角でないウィンドウを作りたいだけならSetWindowRgn()で充分。
半透明をサポートしたいならUpdateLayeredWindow()が基本。

255 名前:デフォルトの名無しさん :04/11/06 23:08:55
アプリケーションがOSからのサスペンドイベントを受信する方法について何かヒントください


256 名前:デフォルトの名無しさん :04/11/06 23:08:57
>>246
PE ヘッダの内部のセクションとかそういうの?
PE ヘッダなんてまともに調べたことなかったな。

しかし、__declspec とかした方が早いような気がするのは
俺だけか。

257 名前:230 :04/11/06 23:43:57
>>250
ms-help://MS.PSDK.1033/winui/winui/windowsuserinterface/windowing/windows/usingwindows.htm#layered_win

258 名前:デフォルトの名無しさん :04/11/07 00:15:35
WM_POWERBROADCAST

259 名前:228 :04/11/07 01:05:14
皆さんありがとうございました。
MSDNライブラリには
SetLayeredWindowAttributesがのっていたんですね
無事透明化できました。

しかし透明化(のカラーキー)の場所でマウスクリックが取れません。
これは仕方のないことなんでしょうか?


260 名前:225:pen廃棄漏れ :04/11/07 01:07:07
>>226, >>227 thanks。色をあれこれ変えていて、分岐によって廃棄漏れがあったの。

261 名前:デフォルトの名無しさん :04/11/07 01:15:30
>>256
__declspec(dllexport)
は関数の外部に公開するというだけで、公開名にはノータッチ。
stdcall なら当然 _hgoe@4 のまま公開される。
_ と @n を削除したければ def ファイルを書くしかない。


262 名前:デフォルトの名無しさん :04/11/07 01:21:26
>>260
廃棄じゃなくて破棄だってばさ。

263 名前:デフォルトの名無しさん :04/11/07 02:31:11
>>249
できたみたいだからいいけど、枠線は上と下にあるよ。

264 名前:255 :04/11/07 03:03:24
>>258

さんきゅ!

265 名前:デフォルトの名無しさん :04/11/07 11:13:15
http://v.isp.2ch.net/up/e606b9e3f104.jpg

ファイルをDLしようとすると
こんなエラーが出てきてしまいます。
2週間前に新しく買ったパソコンで
最初は何もしなくても解凍出来てたみたいなのですが
何かをいじってしまったらしく…
これを元の設定に戻す方法
初期化以外にあれば教えてください。

266 名前:デフォルトの名無しさん :04/11/07 11:47:38
>>265
PC初心者板池

267 名前:デフォルトの名無しさん :04/11/07 12:59:05
>>265
飯塚さん、恐らくunlha32.dllを削除したのでしょう。

268 名前:デフォルトの名無しさん :04/11/07 13:09:37
いかにもなミスですね、飯塚さん。

269 名前:デフォルトの名無しさん :04/11/07 13:12:58
>>265-268
http://pc5.2ch.net/test/read.cgi/tech/1090324689/


270 名前:デフォルトの名無しさん :04/11/07 13:24:43
CreateWindow()でウィンドウを作成しているのですが、ダイアログのように、
左上にアイコンを表示せず、でも、右上に×ボタンは表示したいのです。
このような場合、どのようにしたらいいのでしょうか。

RegisterClass()の引数では、wndclass.hIconをNULLにしています。
CreateWindow()の引数では、WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_DLGFRAME
としているのですが、WS_SYSMENUを指定した時点で、アイコンが出てしまいます。
逆に指定しないと×ボタンが出てこないという...。

271 名前:デフォルトの名無しさん :04/11/07 13:37:14
>このような場合、どのようにしたらいいのでしょうか。

意味のない拘りを捨てればよいと思います。


272 名前:デフォルトの名無しさん :04/11/07 13:55:57
>>270
1週間ぐらい前に似たような質問をどっかのスレで見た

273 名前:デフォルトの名無しさん :04/11/07 15:00:13
>>265

タイトルバーの名前も消しておかないと、飯塚さん

274 名前:デフォルトの名無しさん :04/11/07 15:51:37
真っ青なアイコンを登録

275 名前:デフォルトの名無しさん :04/11/07 16:15:50
>>274
天才!!

276 名前:デフォルトの名無しさん :04/11/07 16:35:52
>>270
っVCLベースのダイアログ

277 名前:デフォルトの名無しさん :04/11/07 16:46:08
>>274
どうせなら、スクリーン全体に貼らなきゃ。

278 名前:デフォルトの名無しさん :04/11/07 19:27:48
プログラムが起動したディレクトリを知る方法って、起動時に記録しておくしか無いですか?
GetCurrentDirectoryだと、ファイル選択のダイアログとかで変化するし、
GetCommandLineはファイル名しか取得してないみたいです
WinMainからだと、起動時にGetCurrentDirectoryでパスを取得して、それをずっと保持しておくだけでしょうか?

279 名前:デフォルトの名無しさん :04/11/07 19:28:41
>>275
タイトルバーの色を変えてますた
とか
タイトルバーがグラデってますた
という状況を考えると透明アイコンのほうがいい

280 名前:デフォルトの名無しさん :04/11/07 19:29:01
>>278
GetModuleFileName

281 名前:デフォルトの名無しさん :04/11/07 19:29:31
ちなみに起動時にカレントディレクトリがすでにexeのディレクトリと
異なる場合もある

282 名前:デフォルトの名無しさん :04/11/07 19:37:22
>>280
おお、出来た。
ありがとうございます。

283 名前:270 :04/11/07 19:49:00
>>274, 275, 277
それだとCAPTIONの左側に空白ができちゃいます。

>>276
VCLはわからないですけど、CreateWindow()するのではなく、
リソースとして空っぽの無駄なダイアログを用意しておき、
CreateDialog()で生成したウィンドウをこねくり回すいう逃げは
あるかなと。
ただ、アイコンのないウィンドウスタイルっていうのがあるのなら、
それを使った方がスマートではないかなと質問してみた次第です。


284 名前:デフォルトの名無しさん :04/11/07 20:12:49
普通のメインウィンドウの子として
CreateDialogで作ったモーダレスダイアログですが、
このダイアログのプロシージャを別ファイルに分割してコンパイルしようとした所、
エディットボックスなどのコントロールのIDが正しく受け取れず
定義されていない識別子ですというエラーがでます。どうしてでしょうか?
分割せずに一つのソースで書いてたときは上手くいっていたのですが…
クラスとかにはしていなくて、普通の関数のようにただソースを分割しているだけです。
///////////////////////////
BOOL CALLBACK DlgProc(HWND hwDlg,UINT msg,WPARAM wp,LPARAM lp)
switch (msg) {
case WM_INITDIALOG:
SetDlgItemText(hwDlg,IDC_EDIT,"aaa");
return TRUE;}


///////////////////////////
プロシージャのプロトタイプ宣言はヘッダファイルでしてます。

285 名前:デフォルトの名無しさん :04/11/07 21:12:28
>>283
Delphi/BCB製アプリのダイアログをSPY++等で見てみれ。
Del/BCBのライブラリはダイアログをCreateWindowで作ってる。

286 名前:デフォルトの名無しさん :04/11/07 21:14:46
>>284
IDC_EDIT自体をヘッダで宣言しろ。

287 名前:デフォルトの名無しさん :04/11/07 23:47:50
>>270==>>283
CreateWindowEx でよければ,WS_EX_TOOLWINDOW があるけど。
ただこの場合,どうしても最大化/最小化ボタンは現れないみたい。

288 名前:284 :04/11/08 00:05:35
>>286
ありがとうございます。リソースのヘッダを読み込むの忘れてました。。。
完全に頭がボケてるようです。
ところで一つのソースにまとめて書いてたときのことですが、
下のようにウィンドウハンドルをグローバルにしたとき正しく渡らないのはなぜでしょうか。
この場合コンパイルは通りましたが、エディットボックスには何も表示されませんでした。
////////////////////////////////////////////////////////////////////
HWND g_hwDlg;//グローバル
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);//プロトタイプ
////メイン関数
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{略
g_hwDlg =CreateDialog(hInst, "Dialog", hWnd, (DLGPROC)DlgProc);//生成。同時にハンドルをグローバルに
略}
////ダイアログのプロシージャ
BOOL CALLBACK DlgProc(HWND hwDlg,UINT msg,WPARAM wp,LPARAM lp)
switch (msg) {
case WM_INITDIALOG:
SetDlgItemText(g_hwDlg,IDC_EDIT,"aaa");//←グローバルのハンドルを指定
return TRUE;}


///////////////////////////


289 名前:デフォルトの名無しさん :04/11/08 00:07:11
>>288
本当にぼけているようですね?
WM_INITDIALOG が呼ばれるのはどのタイミングですか?

290 名前:デフォルトの名無しさん :04/11/08 00:10:28
どのタイミングでしょう? えへえへ

291 名前:284 :04/11/08 00:43:30
本当にボケてしまったようです。ごめんなさい。えへえへ

292 名前:ほんたま :04/11/08 01:37:08
WM_TIMERを使ったタイマーイベントなんですが、タイマーイベントがどうも発生しないんです。
ちなみにWM_CREATEのときメッセージボックスを表示すると、タイマーイベントが発生するんです。
でもメッセージボックスを取っ払うと、発生しなくなるんです…
どうして?教えてくだされ〜♪

293 名前:デフォルトの名無しさん :04/11/08 01:48:18
タイマ取締法違反に引っ掛かったのでしょう。


294 名前:デフォルトの名無しさん :04/11/08 01:51:45
HWND g_hwDlg = NULL;//グローバル
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);//プロトタイプ
////メイン関数
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{略
CreateDialog(hInst, "Dialog", hWnd, (DLGPROC)DlgProc);//生成
略}
////ダイアログのプロシージャ
BOOL CALLBACK DlgProc(HWND hwDlg,UINT msg,WPARAM wp,LPARAM lp)
switch (msg) {
case WM_INITDIALOG:
g_hwDlg = hwDlg; //ハンドルをグローバルに
SetDlgItemText(g_hwDlg,IDC_EDIT,"aaa");//←グローバルのハンドルを指定
return TRUE;}




295 名前:デフォルトの名無しさん :04/11/08 17:24:32
自作プログラム内でDLLを使おうと思っているのですが、
DLL関数の呼び出しって普通のクラス関数(非インライン)呼び出しと比べて
オーバーヘッドが大きいんでしょうか?
一回の処理で何百回も呼び出す予定なんですが差はどれくらい出るでしょうか?


296 名前:デフォルトの名無しさん :04/11/08 17:27:32
>>295
実験してみればいいじゃん

297 名前:295 :04/11/08 17:28:03
すいません環境を書き忘れました。
WindowsXPSP1
VC++6.0SP6
です。


298 名前:デフォルトの名無しさん :04/11/08 17:33:39
スレッドハンドルの扱いに関してなのですが
スレッドが走ってる状態でそのスレッドハンドルをCloseHandleしていいのでしょうか?
試しにスレッドを作成しスレッド処理の最初でCloseHandleしてみたのですが
その後の処理も走っています。
この場合スレッドハンドルにアクセス(WaitForSingleObjectとか)出来ないだけで
スレッド自信は有効ということなのでしょうか?

299 名前:デフォルトの名無しさん :04/11/08 17:55:41
>>298
その通り

300 名前:298 :04/11/08 18:12:08
>>299
ありがとう

301 名前:デフォルトの名無しさん :04/11/08 18:37:29
マウスカーソルを制御する命令と
マウスの移動範囲を限定できる命令を教えてください
CまたはC++でxp、VC.netです

302 名前:デフォルトの名無しさん :04/11/08 18:40:42
制御と言う意味が分からんが、移動範囲の限定はClipCursor、
形を変えるならSetCursor、位置を指定するならばSetCursorPosなど。

303 名前:デフォルトの名無しさん :04/11/08 18:42:14
>>302
レス有り難うございます
マウスカーソル位置を指定した位置に表示することでした
早速試してみます

304 名前:デフォルトの名無しさん :04/11/08 22:01:33
>>295
試してやるから開発環境(ハード・ソフト)をオレにゆずれ

305 名前:デフォルトの名無しさん :04/11/08 22:07:00
マウスボタンが離されたことを検出できるAPIを教えてください
CまたはC++でxp、VC.netです

306 名前:デフォルトの名無しさん :04/11/08 22:09:33
APIって…イベントドリブンが分かっているのだろうか。
マウスが離されたら、そういうイベントが飛んでくるに決まってるだろうが。

307 名前:デフォルトの名無しさん :04/11/08 22:17:56
>>305
フック?

308 名前:デフォルトの名無しさん :04/11/08 22:21:10
メインウィンドウの×ボタンを押したときに確認のダイアログを出すようなプログラムを
終了させるにはどうしたらいいでしょうか?
WM_CLOSEを送った後に、そのメッセージボックスの「はい(Y)」ボタンをクリックさせる方法を
思いついたのですが、常套手段ではないような気がしましたので。

309 名前:デフォルトの名無しさん :04/11/08 22:21:15
レーウェンフック

310 名前:デフォルトの名無しさん :04/11/08 22:25:47
WM_SETFONTで子コントロールのフォントを変更したのですが、
TextMetrics()で確認すると、デフォルトの情報しか返ってきません。
なぜでしょうか?

311 名前:デフォルトの名無しさん :04/11/08 22:26:20
>>306
>>307
ウィンドウプロシジャ関数内でWM_LBUTTONUPの場合で検出してたのですが
ウィンドウプロシジャ関数内でいろいろいじると変数の取り扱いが複雑になるので
マウスを離すことを検出できる命令ないかなと思ったんですが

312 名前:デフォルトの名無しさん :04/11/08 22:48:41
>>311
ウインドウプロシージャから別の関数を呼べば解決する問題の気がする。
設計・考え方を見直すべきでは?

313 名前:310 :04/11/08 22:53:02
間違えた。

TextMetrics() -> GetTextMetrics()


314 名前:デフォルトの名無しさん :04/11/08 23:01:05
ウィンドウの位置を強制的に移動させたいのですが
SetWindowPosなどは高さや幅を指定するのが面倒くさいので
単に移動後の左上のXY座標を入力するだけで
その位置に移動してくれるような命令はないでしょうか。

315 名前:ほんたま :04/11/08 23:01:38
おみゃ〜ら〜、サンプルアップしたぞ〜♪ホームページもアップしたぞ〜♪宇宙一すげぞ〜♪
おみゃ〜らよ、なぜ宇宙一すげーかわかるかな?
おみゃ〜らよ、おりはな、「Visual C++」で自作したDLLをスリムドカンでつくったプログラムから呼び出すのに成功したんだよ!わかる?
おみゃ〜らよ、DLLを呼び出すプログラムを「Visual C++」」でつくるには、Libファイルをリンクに設定したり、ヘッダファイルをインクルードしたりとやるべきことは多いだろ?
おみゃ〜らよ、DLLを呼び出すプログラムを「HSP」でつくるにも、やはりDLLの他に「.as」ファイルが必要だよ。
だが、「スリムドカン」の場合、DLLの他には一切何も必要ないんだな〜う〜ん、これが…自分じわかる?
つまり「スリムドカン」の場合、DLLさえあればDLLを呼び出すプログラムがビルドできるってわけ♪
おみゃ〜らよ、おりは宇宙一画期的だと思わないか?
おみゃ〜らよ、宇宙一すげ〜とわめいたのはそういうことよ♪
おみゃ〜らよ、自分じどうじ?


316 名前:デフォルトの名無しさん :04/11/08 23:04:03
>>314
自分で作れ

317 名前:308 :04/11/08 23:06:15
うまい方法が見当たらなかったので、そのやり方でいくことにしました。

318 名前:デフォルトの名無しさん :04/11/08 23:10:33
>>314
SWP_NOSIZE

319 名前:デフォルトの名無しさん :04/11/08 23:56:05
>>312
ウインドウプロシージャと直接関係のない関数の中のローカル変数がウインドウプロシージャで必要になるので
そのローカル変数をグローバル変数にしないとウインドウプロシージャ内で利用できないのです

320 名前:デフォルトの名無しさん :04/11/08 23:58:28
>>310
GetTextMetrics()にはDCのハンドルを指定するわけだけど、
DCの属性は、CS_OWNDCとかを指定しない限り、
最初はデフォルトの情報が選択されているからじゃないかな。
違っていたらスマソ

321 名前:デフォルトの名無しさん :04/11/09 00:16:58
track bar でパラメータ変えて描画しているんですが、描画にちょいと時間が
掛かるんで、描画が始まったら disable にしようと、EnableWindow() を
使って見たが、効かない。何を使えばいいでしょうか。TBS_... てものあるが
頭に血が上って、英語を読めません。

322 名前:デフォルトの名無しさん :04/11/09 00:35:15
>>321
頭の血を下げろ

323 名前:デフォルトの名無しさん :04/11/09 00:47:39
WM_SETREDRAWは効かない?

324 名前:デフォルトの名無しさん :04/11/09 00:50:02
>>319
聞くだけ聞いてやろう、開発環境は?

325 名前:デフォルトの名無しさん :04/11/09 01:30:42
>>319
だから、「あるコードの実行中まさにそのコードでマウスのボタンが上がって
いるか」は判別できるけれども、「あるコードの実行中まさにその実行中の
コードでマウスのボタンが上げられた」かどうかを判別できるわけがない。
これはOSに関係ない、時間の概念の問題だろう。

「マウスが上げられた瞬間に、ある指定した関数を呼び出してほしい」という
ことであれば話は別だろうが。

326 名前:デフォルトの名無しさん :04/11/09 02:37:24
普通は WM_LBUTTONUP のディスパッチャで検出できる。以上!
なんだけどなあ。Win32 としては基本中の基本の処理だ。
後は、設計の問題。設計のまずさをAPIでカバーしようとするのは
本末転倒だろう。
もしゲームだったら DirectInput も調べてみたら。


327 名前:デフォルトの名無しさん :04/11/09 02:39:30
>>325
>>326
WM_LBUTTONUP 使うかDirectInput使うかのどっちかにします
レスありがとうございました

328 名前:デフォルトの名無しさん :04/11/09 03:13:59
親ウィンドウを破棄したときに、
子ウィンドウも閉じられますが、
このとき、子ウィンドウにWM_CLOSEは送られるのでしょうか。
たとえば、Objectをいちいちdeleteするのが面倒で、
WM_CLOSEのときにまとめてdeleteするようにしていたときなど、
このオブジェクトはちゃんと全部消されるのか心配です。

こんなコードを書いていたのですが。

329 名前:デフォルトの名無しさん :04/11/09 03:15:00
LRESULT CALLBACK WPOL01 (HWND hWndOL01, UINT msg, WPARAM wParam, LPARAM lParam)
{
HDC hdc, hBuffer;
PAINTSTRUCT ps;
RECT rect;
static HBITMAP hBitIcon[30];
switch(msg){

 case WM_CREATE:
hBitIcon[0] = LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance, (LPCSTR)IDB_BITBLACK);
//以下Icon用bitmapをどかどか呼び出す
break;

 case WM_LBUTTONDOWN:
SendMessage(GetParent(hWndOL01), WM_CLOSE, NULL, NULL);
 //左クリックされたら、親ウィンドウを破棄。もちろんこのウィンドウも破棄される

 case WM_CLOSE:
for(int i = 0; i < 30; i ++){
 DeleteObject(hBitIcon[i];
} //ココ、これが呼び出されないと困る。
DestroyWindow(hWndOL01);
break;

 default:
return(DefWindowProc(hWndOL01, msg, wParam, lParam));
}
return 0;
}



330 名前:デフォルトの名無しさん :04/11/09 03:32:14
WM_DESTROY

331 名前:310 :04/11/09 03:54:15
>>320 CS_OWNDC指定したけど、何も変化ないです。

おれの解釈が違ってるみたい…。
コントロールの描画は、フォントが指定されていなければデフォルトが使われて、
指定されていればそのフォントで描画。 
という解釈であってますか?

332 名前:デフォルトの名無しさん :04/11/09 04:04:35
>>328
あるウィンドウに属するオブジェクト類は
特別な理由が無い限り

WM_CREATE オブジェクトの作成
WM_DESTROY オブジェクトの破棄
と考えると良い。

WM_CLOSE はウィンドウに対しての終了要求メッセージ。
しかし、これに対して拒否することも出来る。
ただし、トップレベルウィンドウにしか送られない。

WM_DESTROY が送られてきたらもう終わるしかない。


333 名前:510 :04/11/09 04:27:17
肝心の部分がぬけてた。
ウインドウにテキストを描画するのと、コントロールがテキストを描画するのは
全くの別物である。という解釈で良いですか?

>>328
おれなら親にWM_DESTROYが送られたときに、
SendMessage()で子にもWM_DESTROYを送ってそこで処理します。


334 名前:デフォルトの名無しさん :04/11/09 04:34:28
まて

>おれなら親にWM_DESTROYが送られたときに、
>SendMessage()で子にもWM_DESTROYを送ってそこで処理します。

明示的に送らなくても親に WM_DESTORY 送った後に子供にも送られる。


335 名前:310 :04/11/09 05:31:35
下のやり方だと子のMessageBox()が表示されないんですが、また解釈が間違ってますか?

WNDPROC fnDefProc;// グローバル

LRESULT CALLBACK ParentProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
  static HWND hButton;
  switch(msg) {
  case WM_CREATE:
    hButton = CreateWindow("BUTTON", "PUSH", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
        0, 0, 100, 100, hwnd, (HMENU)1, ((LPCREATESTRUCT)lp)->hInstance, NULL);
    fnDefProc = (WNDPROC)GetWindowLong(hButton, GWL_WNDPROC);
    SetWindowLong(hButton, GWL_WNDPROC, (LONG)ButtonProc);
    break;
  case WM_DESTROY:
    //  SendMessage(hButton, WM_DESTROY, wp, lp);
    MessageBox(hwnd, "Parent", "end", MB_OK);
    PostQuitMessage(0);
    break;
  default: return DefWindowProc(hwnd, msg, wp, lp);
  }
  return 0;
}

LRESULT CALLBACK ButtonProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
  if(msg==WM_DESTROY) MessageBox(NULL, "Child", "end", MB_OK);
  return CallWindowProc(fnDefProc, hwnd, msg, wp, lp);
}



336 名前:デフォルトの名無しさん :04/11/09 10:15:50
>>335
MessageBox()の第一引数は飾りではない。

337 名前:デフォルトの名無しさん :04/11/09 10:16:11
WM_DESTORYはウィンドウが破棄された結果システムが送る物。

338 名前:デフォルトの名無しさん :04/11/09 10:47:08
自分で送りたいときはDestroyWindowすれば結果的に発生する
直接SendMessageしてはいけない。

339 名前:310 :04/11/09 10:56:44
>>334-338
やっぱり間違って覚えてたのか。
教えてくれてありがト。

340 名前:321:trackBar :04/11/09 11:26:52
>>323
どうも。WM_SETREDRAW は効かない。当座の凌ぎに ShowWindow() を使っておく
ことにしたが、バシャッと、皆お隠れになって、ドキッとするね。dim 化で
残したいよ。(下手に活かしておくと、弄られて、描画が起動されるし、busy
にして受け付けないと、freeze 見たいに見えるし)
>>322
TBS_NOTHUMB なんてあるから、隠した thumb を復帰するコマンドがあるだろうと
探しまくったがない。初期設定のみらしい。こんなん何に使うんだ。
頭に来た。まだ下がらない。

341 名前:デフォルトの名無しさん :04/11/09 12:31:20
>>333
ウィンドウにテキストを描画する場合も、コントロールにテキストを描画する場合も、
描画の前にまずデバイスコンテキストを取得する点では同じだと思う。
取得した時点では各属性はデフォルトのままなので、そこからフォント等の属性を
設定することになるわけだけど、属性を設定した後のデバイスコンテキストが
取得できない限り、GetTextMetrics()ではデフォルトの値が返ってくるだけだと思う。

342 名前:デフォルトの名無しさん :04/11/09 13:50:51
コントロールのサイズを動的に変えれますか?
ウインドウのサイズ変更にあわせてリストビューのサイズを変えたいんですが
SetClassLongやSetWindowLongではできそうもないんで。

343 名前:デフォルトの名無しさん :04/11/09 14:02:38
>>342
>>120

344 名前:デフォルトの名無しさん :04/11/09 14:32:55
Windowsではコントロールもおおむねウィンドウの一種に過ぎない
伊達にWindowsと名乗ってるわけではない

345 名前:デフォルトの名無しさん :04/11/09 14:45:26
VRAMのサイズやCPUの名前、メモリのサイズを取得したいのですが
それらを取得するAPIはありますでしょうか?


346 名前:デフォルトの名無しさん :04/11/09 14:47:59
>>344
それもあるかもしれないけど、
WindowsのWindowsたる所以は、シグナル駆動ではなくメッセージ駆動であるということだろう。
WindowsがUnixに勝っている部分のひとつだと思うのだが、認めようとしないUnix支持者。

347 名前:デフォルトの名無しさん :04/11/09 14:54:57
>>346
X11はメッセージ駆動じゃないの?

348 名前:デフォルトの名無しさん :04/11/09 15:07:56
>>347
そっとしておいた方がいいよ。

349 名前:デフォルトの名無しさん :04/11/09 15:22:44
342 は親ウィンドウのサイズ変更に合わせて自動的に子ウィンドウ(コントロール)
がリサイズしてくれるような機能があるかどうかを聞きたいのではないかと
思ったんだけど。

350 名前:デフォルトの名無しさん :04/11/09 15:45:22
>>349
エスパーな解釈だな・・・

そう思うなら、答えてあげれば良いのに

351 名前:デフォルトの名無しさん :04/11/09 16:23:22
>349の解釈なら、そんな機能はAPIにはないと言う答かな。

MFCならCodeGuruにCResizerなんてのがあって便利そうだけど。
#それ使っても、結局WM_SIZEやWM_GETMINMAXINFO辺りは自前で処理しないといけないけど。

352 名前:デフォルトの名無しさん :04/11/09 17:14:27
char buffer[256];
GetWindowText( hwnd, buffer, sizeof( buffer ) );  //A
GetWindowText( hwnd, buffer, sizeof( buffer ) -1 ); //B

APIにはバッファサイズを聞いてくるものが多いですが、
AとBではどちらが正しいのでしょうか

日本語ヘルプだとなんだか変なので、英語のヘルプを
読む限りAが正しい気がするのですが、ネットにはBのサンプルも
多い気がして混乱しています。

353 名前:デフォルトの名無しさん :04/11/09 17:31:31
nMaxCount
[in] Specifies the maximum number of characters to copy to the buffer, including the NULL character. If the text exceeds this limit, it is truncated.

354 名前:デフォルトの名無しさん :04/11/09 17:57:41
>>352
(大抵の)API の説明にあるように、最後の NULL キャラクタを含むサイズを指定するわけだけれども、
引き続く処理でいいい加減で良いから楽したい場合には、あらかじめ ZeroMemory しておいた上で
sizeof(buffer) / sizeof(TCHAR) - 1 を指定して必ず 0 ターミネートのストリングを得たりする手もある。

いい加減じゃマズイ場合には、GetWindowTextLength とか使ってちゃんと文字数文の領域を用意したりする。

355 名前:デフォルトの名無しさん :04/11/09 18:01:29
ZeroMemoryしておかないと終端されないAPIなんてあったっけ?

356 名前:デフォルトの名無しさん :04/11/09 18:06:43
>>355
バッファサイズが足りないときは殆どのAPIがそうなんじゃない?
ZeroMemory じゃなくて末尾だけ 0 入れとけば十分だけどね。

357 名前:352 :04/11/09 19:27:29
>>354
レスありがとうございます。
しかしうーん、例えば「abc」というWindow名を持ったhwndに

char buf[3] = { 'X', 'X', 'X' };
GetWindowText( hwnd, buf, sizeof( buffer ) );

とやると、bufの中身はちゃんと「ab」であり、終端子も入っています(Windows2000)。
私としては>>352のBは必要のない処理である、で結論づけたい気もするのですが…。

或いは過去の遺物か何かなのかなぁ。
いずれにせよ皆さんお付き合い感謝です。

358 名前:デフォルトの名無しさん :04/11/09 19:29:33
失礼、誤記です
× GetWindowText( hwnd, buf, sizeof( buffer ) );
○ GetWindowText( hwnd, buf, sizeof( buf ) );

359 名前:デフォルトの名無しさん :04/11/09 19:50:50
まぁ、世の中碌に調べないで安直に-1して安心しているDQNプログラマが如何に多いかってこった。

360 名前:デフォルトの名無しさん :04/11/09 20:06:17
>>356
たいてい最後は0が入るよ。lstrncpyさえも。
MSDNの説明はこんな感じ
> [out] Pointer to the buffer that will receive the text. If the string
> is as long or longer than the buffer, the string is truncated and
> terminated with a NULL character.

361 名前:デフォルトの名無しさん :04/11/09 20:26:49
ListViewのカラムヘッダの文字がきちんと表示されません。
(幅を変えると出て来たり消えたり、とても微妙な調整をしないと表れなかったり。)
どういった可能性が考えられますでしょうか。
もしくはきちんと左揃えとかで表示するようにはできないでしょうか。

362 名前:デフォルトの名無しさん :04/11/09 20:47:24
スマソ。
漏れが多用する GetModuleFileName やら MultiByteToWideChar やらは NULLキャラクタ
付けてくれないんで、殆どそうなのかと思い込んでた。

363 名前:デフォルトの名無しさん :04/11/09 21:07:39
>>359
ソース汚いから人に見せれないやつも多いのに
ソース公開するのはそれなりの自信がないとできないだろ。
くだらないことにこだわって時間無駄にするより、
少しでも役に立つコード書いた方がよっぽどまし

364 名前:デフォルトの名無しさん :04/11/09 21:14:20
>>361
幅が狭いと省略される
広くすれば出るだろう

365 名前:デフォルトの名無しさん :04/11/09 21:22:11
>>363
そういう意識がバグを生む。

366 名前:デフォルトの名無しさん :04/11/09 21:23:45
>>364
どもです。なんかスタイル構造体のLVCF_FMTメンバを有効にしてたのに
それを実際にどれにするか設定してないのが悪いみたいでした。
きちんとメンバをlv.fmt = LVCFMT_LEFT;みたく設定したら上手くいきました。

367 名前:デフォルトの名無しさん :04/11/09 22:13:08
wininetに関して質問があります。

[test] 書き込みテスト 専用スレッド 24 [テスト]
http://qb5.2ch.net/test/read.cgi/operate/1099168555/
↑のスレッドに"書き込む"という文字を書き込みたいのですが。
ERROR:ユーザー設定が消失しています!と言う結果になり、失敗してしまします。
以下のコードをどのようにすれば、書き込めるようになるでしょうか・・。

368 名前:デフォルトの名無しさん :04/11/09 22:13:41
#include <wininet.h>
void kakikomi();

void kakikomi()
{
HINTERNET hInternet;
HINTERNET hHttpSession;
HINTERNET hHttpRequest;
char CokkieText[1000];
DWORD CokkieTextSize = 0;

// wininetを初期化
hInternet = InternetOpen("Monazilla/1.00",INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
// サーバへ接続
hHttpSession = InternetConnect(hInternet, "qb5.2ch.net",INTERNET_DEFAULT_HTTP_PORT,
NULL, NULL,INTERNET_SERVICE_HTTP, 0, 0);
// HTTP要求の作成
//「書き込む」をURLエンコードした結果→%8f%91%82%ab%8d%9e%82%de
hHttpRequest = HttpOpenRequest(hHttpSession, "POST",
"test/bbs.cgi?submit=%8f%91%82%ab%8d%9e%82%de&FROM=&mail=&MESSAGE=%8f%91%82%ab%8d%9e%82%de&bbs=operate&key=1099168555&time=0",
NULL, "http://qb5.2ch.net/operate/index2.html", NULL, INTERNET_FLAG_RELOAD, 0);
//クッキー取得
HttpQueryInfo(hHttpRequest,HTTP_QUERY_COOKIE,CokkieText,&CokkieTextSize,NULL);
// 作成したHTTP要求の発行
HttpSendRequest(hHttpRequest, CokkieText, -1, NULL, 0);

InternetCloseHandle(hHttpRequest);
InternetCloseHandle(hHttpSession);
InternetCloseHandle(hInternet);
}

369 名前:デフォルトの名無しさん :04/11/09 22:34:12
IME2002のローマ字入力・かな入力をプログラムから制御したいのですが

ImmSetConversionStatus()だと反映されません

http://support.microsoft.com/default.aspx?scid=kb;ja;419357
にはIME98はダメと書いてあるんですが・・

他の方法があるという事なんでしょうか

370 名前:デフォルトの名無しさん :04/11/09 22:57:06
>>368
とりあえず通信は成立してるようだからwininetは問題なし
あとは送ってるデータの問題なんでスレ違い
ツール使って荒らすやつがいるからいろいろチェックしてる。

371 名前:デフォルトの名無しさん :04/11/10 01:18:48
>>362
?????
MSDNのGetModuleFileNameの解説より
lpFilename
[out] Pointer to a buffer that receives a null-terminated string
that specifies the fully-qualified path of the module. If the length
of the path exceeds the size specified by the nSize parameter,
the function succeeds and the string is truncated to nSize characters
and null terminated.

372 名前:デフォルトの名無しさん :04/11/10 06:53:51
>>368
一度も2chに接続してないクライアントから書き込むと
「クッキー送信する云々」というメッセージが出るだろ?
君の作ったコードだとその儀式を通過していない訳だ。


373 名前:デフォルトの名無しさん :04/11/10 06:58:25
>>370 >>372
猿にエサ与えるなよ。ヴォケ


374 名前:デフォルトの名無しさん :04/11/10 10:15:45
>>368
こっちで聞いた方が良いと思われ
http://pc5.2ch.net/test/read.cgi/tech/1098912550/

375 名前:デフォルトの名無しさん :04/11/10 10:48:10
>>374
というよりこっちだろ。
http://pc5.2ch.net/test/read.cgi/tech/1057329161/

376 名前:333 :04/11/10 12:02:31
>>341
分かりやすい説明ありがト。

377 名前:デフォルトの名無しさん :04/11/10 12:14:27
>>371
実際に↓みたいなコードで試してみればすぐにわかるけど、最後に 0 なんか付けてくれないよ。

TCHAR szPath[4];
GetModuleFileName(NULL, szPath, 4);

っていうか、msdn にはこうあるけど・・・
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getmodulefilename.asp
lpFilename
[out] Pointer to a buffer that receives a null-terminated string that specifies the fully-qualified path of
the module. If the length of the path exceeds the size that the nSize parameter specifies, the function
succeeds, and the string is truncated to nSize characters and "cannot be null terminated".

もしかして漏れ(バッファが足りないと0付かないよ派)が正しくて、>>360とかも勘違いか嘘なんじゃないの?

378 名前:デフォルトの名無しさん :04/11/10 12:17:26
>>377
APIにより付いたりつかなかったりする。
少なくともlstrncpyは必ず付く。

379 名前:デフォルトの名無しさん :04/11/10 12:18:40
lstrncpyじゃなくてlstrcpynだった

380 名前:367 :04/11/10 12:21:14
>>370>>372
ありがとうございました。
スレ違いの質問になってしまって申し訳ありません。


381 名前:デフォルトの名無しさん :04/11/10 12:25:18
>>377
ドキュメント読んで、かつ試してみた。lstrホゲは末尾に0付けてくれる。GetWindowTextも。

382 名前:デフォルトの名無しさん :04/11/10 13:35:03
MultiByteToWideCharは? (長さ-1だと仮定して)
ドキュメント読む限りだとERROR_INSUFFICIENT_BUFFERに
なりそうだけど実際にそうなるの?

383 名前:デフォルトの名無しさん :04/11/10 13:36:34
つーかGetModuleFileNameにわざわざ4バイトしかないバッファを
渡すってどういう状況?

384 名前:デフォルトの名無しさん :04/11/10 13:50:58
>>383
0が付くかのテストする為だろ。空気嫁。

385 名前:デフォルトの名無しさん :04/11/10 14:22:08
リストビューの列と行を作成し、
値も入れることができました。
しかしアイテム(セットした値)の取得方法が分かりません。
LVM_GETITEMを使えばいいことまでは分かったのですが・・・。
ググっても全然載ってません。。
LVM_GETITEMでリストビューからアイテムを取得する簡単なサンプルを
お教え頂けないでしょうか。

386 名前:デフォルトの名無しさん :04/11/10 14:37:19
なるほど、APIの文字列の取り扱いは一貫性がないということでFAやね。

387 名前:デフォルトの名無しさん :04/11/10 14:40:35
>>385
ListView_GetItem()が使えると思う。
ListViewのhWndとLVITEM構造体のポインタを渡すのだが、
LVITEM構造体のiItemとiSubItemが行と列になる。

388 名前:デフォルトの名無しさん :04/11/10 15:05:01
RECT r = {0, 0, 640, 480};
AdjustWindowRect(&r, WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU,TRUE);
CreateWindowにr.right - r.leftとr.bottom - r.topを渡す。

AdjustWindowRectの使い方ってこれで合ってますでしょうか?
正しいサイズが求まらないんですが…

389 名前:デフォルトの名無しさん :04/11/10 15:26:23
>>388
拡張スタイルがあるならAdjustWindowRectEx。
あとメニューの折り返しが起きる場合は駄目だった希ガス。

390 名前:実行してないよ :04/11/10 15:31:58
>>385
LVITEM lvitem; //<さぁって情報を得て世界に羽ばたくぞ〜
lvitem.mask = LVIF_TEXT | LVIF_STATE; //<今回はセットした「文字列」と「状態」を取得すっかね
lvitem.iItem = 3; //<リスト3番目の・・・
lvitem.iSubItem = 0; //<最初の列っと

lvitem.stateMask = LVIS_SELECTED; //<「状態」は色々あるけど、今回は選択されているかどうかが知りたいの

char buffer_text[256]; //<おっといけねぇ
lvitem.pszText = buffer_text; //<「文字列」を取得するなら入れ物がねぇとな
lvitem.cchTextMax = sizeof(buffer_text); //<APIたんはバカだから、入れすぎないよう「文字列」の長さも指定っと

::SendMessage( hwnd_dialog, LVM_GETITEM, 0, (LPARAM)&lvitem ); //<APIたん、こいつで頼むよ
//ListView_GetItem( hwnd_dialog, &lvitem ); //またはこいつで

if( lvitem.stateMask & LVIS_SELECTED ); //おー入ってる入ってる
OutputDebugString( buffer_text ); //さんきゅう、APIたん

391 名前:デフォルトの名無しさん :04/11/10 15:37:01
わるい、間違えた
if( lvitem.state & LVIS_SELECTED );
OutputDebugString( buffer_text );

392 名前:デフォルトの名無しさん :04/11/10 17:07:52
フックに詳しい方、どうかお助けください!

やりたいことは特定ウインドウの低レベルキーボードフックです。
つまり左右のShiftやCtrlキーの区別を取れるフックがしたいのです。
しかしどうやってもスレッド単位のフックができません。
下のように記述(hwndはフックしたいウインドウのハンドルです)しても
hookには0しか返ってきません。つまりフック失敗です。

hook = SetWindowsHookEx(WH_KEYBOARD_LL, HookProc, GetWindowLong(hwnd, GWL_HINSTANCE), GetCurrentThreadId());

しかしシステム単位のフックならできるのです。
下のように書くと、hookには0以外の値が帰ってきて、OS全体がフックできてしまいます。

hook = SetWindowsHookEx(WH_KEYBOARD_LL, HookProc, GetWindowLong(hwnd, GWL_HINSTANCE), NULL);

しかしやりたいのはスレッド単位の低レベルキーボードフックなのです。
低レベルキーボードフックというのは、システム単位でしかできないものなのでしょうか?
※ちなみに低レベルじゃないキーボードフックの場合はスレッド単位でもできました。




393 名前:sage :04/11/10 17:18:27

フックプロシージャが現在のプロセスに関連付けられているコード内に置かれているときは、
NULLを指定しなければなりません

394 名前:388 :04/11/10 17:20:05
>>389
拡張スタイルは使ってないし、
メニューは折り返しが起きるほど多くは無いです…

395 名前:393 :04/11/10 17:21:54
↑途中
SetWindowsHookExの3番目の引数のこと

396 名前:デフォルトの名無しさん :04/11/10 17:29:55
>>395
ありがとうございます。
インスタンスハンドルをNULLですよね?
しかしやってみましたがダメでした。

自己レスですみませんが、どうも低レベルキーボードフックはやっぱり
グローバルじゃないとできないみたいです。
GetLastErrorで1429が返ってきたのですが、
その説明が、

ERROR_GLOBAL_ONLY_HOOK
This hook procedure can only be set globally.

ということでした。
道理で、ネットを検索してみてもグローバルな例しか見つからない訳です。
失礼しました。

397 名前:393 :04/11/10 17:52:19
VS6付属のMSDNには
>WH_KEYBOARD_LL スレッド、または、システム
となっているが、MSDN最新 (microsoft.com)では
>WH_KEYBOARD_LL グローバルのみ
となってる。MSDNだけでも最新版使えってことか。

398 名前:デフォルトの名無しさん :04/11/10 18:46:25
>>388
> Note that you cannot specify the WS_OVERLAPPED style.
って書いてあるので、WS_OVERLAPPEDは指定しない方がいいのでは?

399 名前:388 :04/11/10 19:16:07
>>398
ありがとうございます。解決しました。
その文、Web上のMSDN Libraryには載ってますね…
VC++6のやつには載ってなかったんでorz

400 名前:デフォルトの名無しさん :04/11/10 19:32:05
文字列入力ダイアログを表示させるAPIって無かったでしたっけ?

401 名前:ほんたま :04/11/10 19:34:29
みなみなさまがた〜、GetLocalTimeを使って時間を取得すると、SYSTEMTIME構造体にセットされますが、
マニュアルを見るとSYSTEMTIME構造体のメンバは、



曜日




ミリ秒

と書いてあるんです。
でも実際にSYSTEMTIME構造体にアクセスして先頭から順番に値を表示してみると、


曜日




ミリ秒
0?(不明)

の順番にメンバが並んでいるのが正しいのではないかと思うんです。
そこんとこどうなっているのかお聞きしたいんですが…?
教えてくだされ〜♪

402 名前:ほんたま :04/11/10 19:52:32
みなみなさまがた〜、いまSYSTEMTIME構造体の先頭に印をつけて、バイナリファイル見てみたところ、
何故かSYSTEMTIME構造体の先頭番地より2バイト前のアドレスを読むと、年が正しく取得されることが判明しました!
だからメンバの並び方はマニュアル通りで良かったのですが…
みなみなさまがた〜、何故SYSTEMTIME構造体の先頭番地より2バイト前から値がセットされるのでしょうか?
教えてくだされ〜♪

403 名前:デフォルトの名無しさん :04/11/10 19:54:35
お前のやり方がおかしいだけだろ。

404 名前:ほんたま :04/11/10 20:07:44
>>403
つーか実際にはSYSTEMTIME構造体の構造はこう↓なってるんではないかと…
予備領域


曜日




ミリ秒

でGetLocalTime(&SYSTEMTIME)と呼び出すと、自動的にSYSTEMTIME+2番地から値がセットされていくんではないかと…
どうでしょうか〜みなみなさまがた〜♪


405 名前:デフォルトの名無しさん :04/11/10 20:11:35
バカすぎて笑える。

406 名前:ほんたま :04/11/10 20:19:39
あるいはSYSTEMTIME構造体はPREバイト付きの構造体なのかもしれんです…
PREバイトというのは、おりがいま思い付いた概念で、構造体の先頭番地の前に何バイトかの領域を持っていて、
最初のメンバはそこから始まるようにしたもののことを言う。
マイクロソフトのことだから、PREバイト付きの構造体という概念を持っていてもおかしくはない…

407 名前:デフォルトの名無しさん :04/11/10 20:21:48
つまらんネタだなぁ

408 名前:デフォルトの名無しさん :04/11/10 20:22:37
winbase.hからのコピペ

typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;

409 名前:デフォルトの名無しさん :04/11/10 20:23:21
コテハンってこんな奴ばっかりだな…

410 名前:デフォルトの名無しさん :04/11/10 20:27:02
>>402
これって何かのコピペ?

411 名前:デフォルトの名無しさん :04/11/10 20:37:02
wYearもWORDなのか。
65536年問題が心配だな

412 名前:ほんたま :04/11/10 20:45:02
>>408
最初のwYearはDWORDってことはないか?
そうすればすべてがつじつま合うんだが…
ドキュメントの書き間違いかもしれんぞ。

413 名前:デフォルトの名無しさん :04/11/10 20:54:01
そう思うんならヘッダ見れ

414 名前:デフォルトの名無しさん :04/11/10 21:01:22
> でも実際にSYSTEMTIME構造体にアクセスして先頭から順番に値を表示してみると、
アクセスの仕方に問題がある悪寒。

415 名前:デフォルトの名無しさん :04/11/10 21:14:47
>>406
かもしれんじゃなくて実際にあるのだが?
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csref/html/vcwlkstructstutorial.asp

416 名前:デフォルトの名無しさん :04/11/10 21:19:07
ATOMってなんですか?

417 名前:デフォルトの名無しさん :04/11/10 21:20:30
アライメント

418 名前:416 :04/11/10 21:21:45
あ〜すみません、猫のところに説明がありました。探し方が悪かった・・・。
でも、イマイチなににつかうかわからない・・・。

419 名前:デフォルトの名無しさん :04/11/10 21:37:13
>>416
グローバルアトムは比較的簡単にプロセスをまたぐ文字列のやり取りに使える。
ウィンドウクラスのアトムはCreateWindow(Ex)でクラス名の文字列を指定するよりこっちを使う方が俺は好き。
ローカルアトムは……、何に使えばいいんだ?2バイトケチるためか?

420 名前:デフォルトの名無しさん :04/11/10 22:42:37
>>411
doubleでも使っとけ、クソが。

421 名前:デフォルトの名無しさん :04/11/10 22:57:34
2038年問題ってSYSTEMTIMEだと起きないの?

422 名前:デフォルトの名無しさん :04/11/10 22:57:37
浮動小数点では解決しない(RFC2550)

423 名前:デフォルトの名無しさん :04/11/10 23:15:57
ビットマップの平均色を求めるにはどうすればいいですか?
例えば1*2のビットマップで(255,255,255)と(0,0,0)なら(128,128,128)みたいな感じです。
正確さよりも処理の速さを優先したいです。

424 名前:デフォルトの名無しさん :04/11/10 23:24:24
自分で考えろ

425 名前:デフォルトの名無しさん :04/11/10 23:24:46
>>423
1. MMX 命令で自前の処理を書く
2. Intel の IPP 等を買ってきて使う
3. DirectX のテクスチャにして、ミップマップの自動生成機能を利用する
どれでも適切なやり方でどうぞ。

426 名前:ほんたま :04/11/10 23:41:48
>>414
>アクセスの仕方に問題がある悪寒

おみゃ〜はどうせ、マイクロソフトのコンパイラが定義してくれてる値を使って、SYSTEMTIME->wYearとかSYSTEMTIME->wMonthみたいなアクセスの仕方しか経験ないだろ?
だからwYearが何番目のメンバかwMonthが何番目のメンバかなんて考えたこともないだろ?
そういうのは隠蔽されているからな w♪
ところがおりは違う。
おりはマシン語を直接使っているので、wYearが何番目のメンバかwMonthが何番目のメンバかを知らないと、プログラミングできないわけだ。
だから[SYSTEMTIME][SYSTEMTIME+2]というようなアクセス方法を使う。
ところがメンバが2バイトずつ前にずれていることが判明したので、疑問に思ったわけだよ。
まあ、これはプログラミングにおける最高度の超絶技巧なので、カプセル化されたプログラミングしか知らないおみゃ〜には想像もつかないだろうがな…♪
自分じわかる?

427 名前:デフォルトの名無しさん :04/11/10 23:50:53
釣れますか?

428 名前:デフォルトの名無しさん :04/11/10 23:54:03
効果音なら、midiOutShortMsg より、sndPlaySoundの方が負荷は少ないのですか?



429 名前:414 :04/11/11 00:05:32
>>426
長レスに敬意を表して、釣られてみよう。残念ながらハズレ。
さすがにフルアセンブラはご無沙汰だが、今でも一部インラインで組むことくらいはある。
ていうか、コンパイラしか使ってなくてもデバッグの時にアセンブルソースくらい見ると思うけど。

それはともかく、
> マシン語を直接使っているので
↑このあたりの表現が気になった。実は偉大なお方?

430 名前:ほんたま :04/11/11 00:07:30
おみゃ〜ら、すまん、全面的におりの勘違いだったよ^^;
というのもおりは、[SYSTEMTIME]の先頭アドレスの値をまずECXレジスタに読み込み、その値を16ビット右シフトして、次にCXレジスタの値を作業用のバッファにセットしていたんだよ。
なぜ右シフトしたかといえば、ファイル表現で考えてECXレジスタの上位16ビットに先頭アドレスの値が、下位16ビットに次のアドレスの値がはいっていると勘違いしていたのよ。
とろこがこれは逆だったんだな…!
だから右シフトするのをやめて、そのままCXレジスタの値をセットしたら、うまくいったというわけよ。
やっぱPREバイトとかドキュメントが書き間違ってるとかなかったよ。
マイクロソフトのドキュメントは正しかったよ…。
おりとしたことが、とんだミステイクだったよ♪
おみゃ〜らよ、自分じすまんな…どうじ?

431 名前:414 :04/11/11 00:10:22
やはりエンディアンネス絡みの問題だったか。思った通りじゃねーの。

432 名前:デフォルトの名無しさん :04/11/11 00:14:03
リトルエンディアンも知らずに、マシン語云々言ってたのか。
もっと基本から勉強しろよ

433 名前:デフォルトの名無しさん :04/11/11 00:17:40
StretchBltで1x1ピクセルに

できたらいいな

434 名前:デフォルトの名無しさん :04/11/11 08:53:24
>>423
>>425

・・・・

全ピクセル足して、面積で割るだけなのに。小学生でもできるぞ。

435 名前:デフォルトの名無しさん :04/11/11 10:41:57
リストビューで項目の編集をできるようにしたいのですが
1列目しか項目を選択及び編集ができず、2列目以降は選択もできない状態です。
以下、ソースです・・・。原因わかります?
case WM_NOTIFY:
if ((int)wp == LISTVIEW) {
lvinfo = (LV_DISPINFO *)lp;
switch (lvinfo->hdr.code) {
case LVN_BEGINLABELEDIT:
hEdit = ListView_GetEditControl(hList);
break;
case LVN_ENDLABELEDIT:
GetWindowText(hEdit, buf, sizeof(buf));
ListView_SetItemText(hList, lvinfo->item.iItem, 0, buf);
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
col.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
col.fmt = LVCFMT_LEFT;
col.cx = 100;//列の幅 ピクセル単位
col.pszText = TEXT("社員ID");
col.iSubItem = 0;

ListView_InsertColumn(hList, 0 , &col);
int z;
z = 1;
col.iSubItem = z;
col.pszText=TEXT("氏名");
ListView_InsertColumn(hList, z , &col);
z++;

436 名前:デフォルトの名無しさん :04/11/11 11:52:03
>>434
だからそれを「速くやる」方法について話してるんだろ。

437 名前:デフォルトの名無しさん :04/11/11 12:17:10
>>434
今の小学生は3桁以上の計算は出来ません。

438 名前:デフォルトの名無しさん :04/11/11 12:57:03
>>436
除算は最後の一回だけだし、
加算はループで足し算するんだが、普通に足すより速くはならんぞ。
乗算とか入らないなら、MMXも必要ない。
第一、こんな質問してくるレベルの人間にはそれで十分だ。

439 名前:デフォルトの名無しさん :04/11/11 13:00:44
>>438
なにひとりでカッカしてんの?

440 名前:デフォルトの名無しさん :04/11/11 13:02:37
435
リストビューは1列目のラベルしか編集できない。

441 名前:デフォルトの名無しさん :04/11/11 13:05:45
>>439
馬鹿か?それはお前の思い込みに過ぎんぞ。
この程度のことでカッカする方がどうかしている。
お前がこういう文章を書くときはカッカしている時だからといって、
他人までそうだと思わないことだ。


442 名前:デフォルトの名無しさん :04/11/11 13:06:57
>>441
何カッカしてんの?

443 名前:デフォルトの名無しさん :04/11/11 13:09:01
何にせよ技法の話だからスレ違い。
と言いたいが面白いのでもっとやれ

444 名前:デフォルトの名無しさん :04/11/11 13:11:00
>>435
編集は一列目だけ。
選択の方は、こんな感じで。
ListView_SetExtendedListViewStyle(_hWnd, LVS_EX_FULLROWSELECT);

>>442
そういうことにしたいのですね。勝手にそう思ってれば?

445 名前:デフォルトの名無しさん :04/11/11 13:11:50
>>438
見た感じ>>438>>423はだいたい同じレベルだと思うんだけど。
・どちらも平均とは何かについては知っている
・高速に処理する方法は知らない

446 名前:デフォルトの名無しさん :04/11/11 13:13:06
オモロイ w

447 名前:デフォルトの名無しさん :04/11/11 13:13:37
それはさておき、カラーの平均ってなんだろ。
RGB各プレーンそれぞれの単純平均だと赤とシアンの平均がグレイになるんだけど。
グレイであることが保証されてるなら単一プレーンだけの平均ですむし、
平均輝度とか平均彩度とか、何が要求されているのかよく判らんね。

448 名前:デフォルトの名無しさん :04/11/11 13:16:32
>>447
算術平均以外の平均なら、ほげほげ平均とかって明記するんじゃない?
ってのはともかく、アルゴリズム的には>>438の言うように足して割るのが最適だから、
あとは>>425の言うように実装手段でアレコレするしかない。

449 名前:デフォルトの名無しさん :04/11/11 13:16:53
>>445
全ピクセルの平均をとるなら、データスキャンして普通に加算するのが一番速い。
画像をロードした瞬間にわかるって言ってもいいぐらい。
今時のCPUなら、アセンブラ化してもほとんど変わらないよ。

450 名前:デフォルトの名無しさん :04/11/11 13:19:22
>>448
MMX使っても速くならんぞ?
テクスチャにするなんて論外だ。転送にめちゃくちゃ時間がかかる。
それともバイリニアで縮小画像を作ることを考えているのだろうか?

451 名前:デフォルトの名無しさん :04/11/11 13:19:38
>>449
今時のCPUはキャッシュミスの際のペナルティが(そうでない場合との比較で)大きいから、
メモリをスキャンするときにアセンブラでちゃんとプリフェッチを入れれば簡単に+10%位にはなるよ。

Intel Compiler とかなら勝手にやってくれるかもしれんが。

452 名前:デフォルトの名無しさん :04/11/11 13:20:49
ごく小さい領域の単純平均ならMMXつかえばRGB同時に計算できるとかあるけどな。
あとは精度落としていいならサンプル間引くぐらいしかないんじゃないか。

453 名前:デフォルトの名無しさん :04/11/11 13:22:59
>>451
そこまでの最適化を必要としている奴が、>>423みたいな質問よこすか?
「ここまでやって、これが限界でしょうか」というのなら、
極限までの最適化方法を教える努力をするけどね。

454 名前:デフォルトの名無しさん :04/11/11 13:27:43
>>452
>あとは精度落としていいならサンプル間引くぐらいしかないんじゃないか。
業務向けにマトモな高速化案キタ━━━━━━(゚∀゚)━━━━━━ !!
そういえば画像処理で画素間引いたりして高速化するのは定石だな・・

455 名前:デフォルトの名無しさん :04/11/11 13:27:54
>>452
整数「加減算」だけならMMXを使う必要はないって。
通常のアセンブラでも同時計算は可能。

間引くのは有効だけど、そもそも画像をメモリへロードする方が重いので、
そこまで気にするのがちょっと疑問。

456 名前:デフォルトの名無しさん :04/11/11 13:28:25
>>453
なんでそんなに偉そうなの?

457 名前:デフォルトの名無しさん :04/11/11 13:29:02
>>456
偉いから。

458 名前:デフォルトの名無しさん :04/11/11 13:35:42
>>423
これが Win32 API スレであることを考えると、たぶん真っ当な答えは

・Bitmapがある程度大きい場合には、GetDIBits 等で DIB として取り出し、
 ピクセルフォーマットに従ってメモリ値を読み出して平均をとる。
 (可能であれば最初から DIB として画像を保持しておくべき)
・Bitmapが 1x2 とか小さい場合には、GetPixel で RGB 値を取り出して平均をとる。
・"ビットマップ"というのが画像ファイルのことであれば、LoadImage で DIBSection にして、
 GetObject で DIB と BITMAPINFOHEADER を取得してアレコレする。

っていうような感じなんだろうなぁ。

459 名前:デフォルトの名無しさん :04/11/11 13:43:03
googleったらこんなの出てきた。
ttp://www.emit.jp/prog/prog_b.html

> v2 = (v0 & v1) + (((v0 ^ v1) & 0xfefefefe) >> 1);

なんでこれで平均がでるの?ワケワカラン

460 名前:デフォルトの名無しさん :04/11/11 13:44:14
ここでの質問して良いのか疑問ですけど、どこがいいのかわかりません
でしたのでお願いします。

Windows2000やXPなんかでは、LANケーブルが抜けている場合
タスクトレイにネットワークのアイコンが出てLANケーブルが
抜けていることがわかりますが、プログラム上からLANケーブルが
抜けていることを特定する方法はないでしょうか?



461 名前:デフォルトの名無しさん :04/11/11 13:51:06
MessageBox(NULL, "LANケーブルは抜けていますか?", "質問", MB_YESNO);

462 名前:デフォルトの名無しさん :04/11/11 13:52:49
C = 繰り上がりがある場合の繰り上がり (v0 & v1) <<1
S = 繰り上がりを無視した加算結果 (v0 ^ v1)
C + S は足すと普通の加算になる。右に1シフトする(2で割る)と平均になる。
(S は各バイトの最下位ビットが立っている可能性があるから、0xfefefefeでマスクしておく)

精度は低く速度も遅いがわかりやすい代替物は、
((v0 >> 1) & 0x7f7f7f7f) + ((v1>>1) & 0x7f7f7f7f)。

463 名前:デフォルトの名無しさん :04/11/11 14:17:40
>>459
>>462
目からウロコが10枚くらい出た

464 名前:デフォルトの名無しさん :04/11/11 14:17:50
>>462
>>1 クリックしてしもた


465 名前:459 :04/11/11 14:23:55
>>462
サンクス!なんとなくわかった希ガス



466 名前:デフォルトの名無しさん :04/11/11 14:51:48
>>462
COBOL 出る前ってこんなんばっか見たいだった気がする。なつかしい。

467 名前:デフォルトの名無しさん :04/11/11 15:06:01
とてつもないジジイが紛れ込んでないか?

468 名前:デフォルトの名無しさん :04/11/11 15:22:47
>>460
このスレのどこかに同じような質問なかったっけ?

469 名前:460 :04/11/11 15:41:29
>>468
ほんとですか〜。
探してたのですが見つけきれませんでした。
もし思い出されたらご一報お願いします。


470 名前:デフォルトの名無しさん :04/11/11 16:26:04
WinXP SP2を適用後に、RegSaveKeyがエラーになってしまいます。
戻り値は 87「パラメータが間違っています」となります。
SP1以前は正常に動作していました。
SeBackupName 特権は取得しています。

471 名前:デフォルトの名無しさん :04/11/11 17:55:50
>>460
ipconfig で分かる


472 名前:デフォルトの名無しさん :04/11/11 17:57:41
小手先でいじるよりも
SetStretchBltMode(hdc,HALFTONE);
して
StretchBltしたほうが速いと思う。
DDBならハードウェアアクセラレーションが効くかもしれない。

473 名前:デフォルトの名無しさん :04/11/11 18:08:41
ボタンの上にマウスカーソルが来た時に来るメッセージは無いでしょうか。
if(HIWORD(wParam) == BN_XX)
みたいなのを探していたのですがありませんでした。

474 名前:デフォルトの名無しさん :04/11/11 18:09:43
WM_MOUSEHOVER


475 名前:473 :04/11/11 18:13:32
>>474
それでできそうです。ありがとうございました。

476 名前:460 :04/11/11 18:46:12
IPHlpApi.h を使えば ネットワークのいろいろな情報が取得できるけど
Cable Disconnected って直接的に取得は出来ない気がします。
何を持って Cable Disconnected 状態なのか特定できないものでしょうか?

これってWin32APIよりMFCかな・・・

477 名前:デフォルトの名無しさん :04/11/11 19:12:08
USBオーディオデバイスに直接アクセスしたいのですが、GUIDを知る方法が分かりません。
ヒューマンインターフェースデバイス(HID)ではHidD_GetHidGuidでゲットしたのですが…
御教示おねがいします。

478 名前:デフォルトの名無しさん :04/11/11 20:15:16
現在キューに入っているメッセージではなくて
Windowsシステムにどのようなメッセージが用意されているのか
MSDNで探したいのですが、
urlないし検索のためのキーワードを教えてください。


479 名前:デフォルトの名無しさん :04/11/11 20:18:08
>>478
ソースもらうしかねえだろな
あとアプリ定義のメッセージもあるわけだが
それはどーするんだ?

480 名前:478 :04/11/11 20:18:57
http://www.geocities.co.jp/SiliconValley-Cupertino/5872/Message/WM/index.html

すみません、上にありました。
しかし178個って、これで全てなんでしょうか。
なんだか少ないように思ったのですが。

481 名前:デフォルトの名無しさん :04/11/11 20:30:45
全てじゃないです。

482 名前:デフォルトの名無しさん :04/11/11 20:32:13
ボタンに文章ではなくて、
ビットマップなどの絵を表示する方法を教えてください。

483 名前:デフォルトの名無しさん :04/11/11 20:35:42
>>480
BM_ とか CB_ みたいに WM_ で始まらないのもいっぱいあるぞ

484 名前:デフォルトの名無しさん :04/11/11 21:06:50
>>460
>>89
>>91

485 名前:デフォルトの名無しさん :04/11/11 21:17:35
>>482
BS_BITMAPとかBS_ICON、もしくはBS_OWNERDRAW

486 名前:デフォルトの名無しさん :04/11/11 21:32:59
そういや、MSが用意してるメッセージで、WM_USERとか使うのが何個かあったよね
自作メッセージって、どの辺の範囲使っておけば、MSのライブラリと競合しないものなの?
自作メッセージって結構使うんだけど、新しくコントロール追加した時に競合しないか心配だったりする

487 名前:デフォルトの名無しさん :04/11/11 21:36:17
>>485
ありがとうございます。調べてみます。

488 名前:デフォルトの名無しさん :04/11/11 21:40:33
>>486
WM_APP以降を使っておけば、とりあえず競合はしないので安心。

489 名前:デフォルトの名無しさん :04/11/11 21:40:55
WM_APP + 0x3FFFまで

490 名前:デフォルトの名無しさん :04/11/11 21:44:13
>>488>>489
どもです。
既に作ったプログラムを直すのは面倒ですが、次からはそれ以降で作ります

491 名前:デフォルトの名無しさん :04/11/11 21:50:56
ところでWM_USERからは何に今は使うの?

492 名前:デフォルトの名無しさん :04/11/11 22:01:13
自作のカスタムコントロールとかかな?

493 名前:デフォルトの名無しさん :04/11/11 22:03:33
http://www.google.co.jp/search?btnI=I&q=MSDN+WM_APP

494 名前:デフォルトの名無しさん :04/11/11 22:35:40
>>492
3rdParty製の

495 名前:ごめん、途切れた :04/11/11 22:36:15
コントロールが使ってた肝する。

496 名前:423 :04/11/11 22:37:27
みなさん貴重な意見をありがとうございます。
お察しの通り私は知識も経験も少ない初心者なのでとてもためになりました。
デジカメサイズのビットマップ200枚ほどの平均色を求めたかったので速さにこだわっていました。
適当に間引きながら足し算で求める方法でアプローチしてみます。

497 名前:デフォルトの名無しさん :04/11/11 22:39:11
デジカメのデータだとファイルI/OとJPEGデコーダで律速されそうだが。
IJLってもう無料で入手不可能なんだったか?

498 名前:デフォルトの名無しさん :04/11/11 22:40:22
ダイアログが表示されているときに押されたボタンの仮想キーコードを
表示させたいんだけど、どうやって押されたキーのコード取得するんですか?

499 名前:デフォルトの名無しさん :04/11/11 22:40:45
>>496
画像の色計算より
読み出しとかにかかる時間のほうが支配的だと思うから
速度気にしなくていいんじゃないかな。

500 名前:デフォルトの名無しさん :04/11/11 22:56:22
200枚って、オーバーフローしないサイズ?


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