乙!
SuspendThread
ResumeThread
>>995 どっかのサンプルを真似しただけだが、
WM_LBUTTONDOWN を捉える。lparam に座標が入っている。
(WM_LBUTTONDOWN で MSDN を検索すると、サンプルがあるのではないか)
modal dialog なら、switch (msg){... の中ですむ。
座標は、local へ変換するかして、お目当ての矩形(pane)と平仄を合わせる。
PtInRect() だっかたかで、目当ての矩形の中にあるなら、GetCPixel() で
色は取り出せる。色の index を求めるなら、その矩形を描いた方法を逆に
辿って、位置を割り出す。256 色の、個々の色の矩形は、多分、幅、高さは
皆、同じだろうから、それで、座標の x, y を割り、数値を一次元に戻せば
よい。
modeless dialog なら、dialog の HWND をグローバルにしておいて、
それから辿る。dialog を閉じたら、HWND は NULL クリアして、以後来ない
ようにする。
コントロールパネル→ハードウェアの追加と削除 →デバイスの削除/取り外し→デバイスの取り外し と同じ事をプログラムから行いたいのですが どのようにすでば良いのでしょうか? DetachDevice( STORAGE_DEVICE_DESCRIPTOR sdd ) みないな感じのAPIがあると一番良いのですが… よろしくおねがいします。
>>前スレの最後の方 ReadFileの1行番はWIN32APIには無いはず 全部(もしくは途中まで)読み込んで、改行区切りに自分で変換しないと駄目だと思う 1行にこだわっててAPIは何でも良いなら、C標準のfgetsで読み込むのが良いかと
>>9 fgetsって速度が遅いとかいうことはないですか?
常識的に考えれば、遅いわけも早いわけもないだろ
>11 役に立たない回答だねぇ
>>11 社会的に何の信頼もない君の「常識」なんて・・・
2ちゃねらーの常識なんて・・・
ExitThread(ぬるぽ);
ソートのアルゴリズムは出尽くしてるのは常識だろ 改行を判断するのもごく当たり前にやるしかないのは常識 馬鹿ですか?
RaiseException(がっ);
18 :
デフォルトの名無しさん :05/01/19 18:57:17
CreateFileMappingかPipe使え。パイプはOSでサポートされたjavaのStringBufferみたいなもん。
リストビューをちらつき無しで表示する事は出来るのでしょうか メモリDCを作ってbltで更新する手法はリストビューでも出来ますか?
書いてるだろ
22 :
デフォルトの名無しさん :05/01/19 19:08:07
>19 サブクラス化して描画関連メッセージ処理を包むのは、大変そうだ
>>10 使うのが難しい関数でもないし、試しに使ってみればいい(ReadFileが使えるなら、何も悩まんだろう)
でも、もしfgetsそのものについて質問があれば、C言語関係のスレでよろしく。
24 :
前スレ999 :05/01/19 19:45:42
>>9 無いですか。
ありがとうございました。
やり方考えます。
>16 プログラマの常識はいいがお前の常識は世間に通用しない。
どっちにしろお前らみんなたいしたことないんだから、 不必要な書き込みはするな。
. ∩∩ | | | | (゚ω゚ ) < けんか、ここまで 。ノДヽ。 bb
http://pc5.2ch.net/test/read.cgi/tech/1102900418/906-910 > 906 :デフォルトの名無しさん :05/01/19 22:06:37
> win32apiのReadFileで1行読み込みのプログラムを作ろうと思ってます。
>
> この場合、全データをメモリに読み込んで改行ごとに分けるか。
> 1バイトづつ改行まで読み込んでいくとでは
> どっが効率良いですか?
>
>
> 909 :デフォルトの名無しさん :05/01/19 22:34:22
>
>>906 > 死ねマルチ
>
>
> 910 :デフォルトの名無しさん :05/01/19 22:34:25
>
>>906 > お前なぁ、実際にやってみたらわかる事だろ?アホか?
XPのメニューやツールチップのようにウィンドウに影をつける APIって知ってませんか?
>>31 変な日本語。「知りません」って答えてあげれば満足なのかな。
34 :
デフォルトの名無しさん :05/01/19 22:44:55
>31 モノクロパターンブラシSetROP4
やっぱり2chでは答えられるレベルではなかったですね。 自己解決しました。すんまそ。
37 :
デフォルトの名無しさん :05/01/20 00:52:10
タイムアウトするメッセージボックスないですか? n秒後に勝手に閉じてもらいたい。
自作ウィンドウでやるか、他のプロセスでタイマー制御させるか
>>37 そういったものは、知らないです。
SetTimerでタイムアップしたらSendMessageで送ればどうでしょ?
40 :
デフォルトの名無しさん :05/01/20 01:06:21
自分で1から作るのはしんどいので フックする方法ありませんか? モーダルなのでどうしようもない気がします。
フックとかについて詳しくないんで、メッセージボックスで出来るかどうか私は知らない プロシージャのアドレス受け取ってすげ替えればいけるのかな? 強引な方法で、もう一個プログラム作るのはダメ? メッセージボックス作る直前に、「時間が経つと、任意のメッセージボックスを閉じるプログラム」を実行するっての 閉じるメッセージボックスの選択は、ウィンドウテキストをユニークなものにして、サーチするとか (スレッドとかのが、まだスマートに出来るけど)
フックプロシージャ立ててからメッセージボックス表示すんの。 そうすればフックは可能。タイマーまでは試してないから知らん。
43 :
デフォルトの名無しさん :05/01/20 01:49:14
>>41 そんなの駄目です。
>>42 意味がわかりません。
フックしようにもハンドルがないので。
SetWindowsHookEx と WH_CBT 調べて味噌。
45 :
デフォルトの名無しさん :05/01/20 02:03:46
>>44 だんだんMessageBoxから遠ざかってる気がしてきました。
数行でやっつけ仕事みたいな感じでできないものでしょうか。
数行とは言わないけど結構簡単よ。 SetWindowHookEx でローカルフック開始。 直後にメッセージボックス表示。 ウィンドウが作られたYO!ってくるからタイマー開始。 なんも無しで期限がきたら破棄。 期限前に何かあったらタイマー終了。 フックも終了。 ほら。
int MsgBoxTimeout(HWND h, LPCTSTR text, LPCTSTR cap, UINT style, UINT timeout) { unsigned id; HANDLE cth = GetCurrentThreadId(), th = _beginthreadex(NULL, 0, lambda __stdcall(UINT timeout) int { HWND hmb = 0; Sleep(timeout); EnumThreadWindows(cth, lambda __stdcall(HWND h, LPARAM l) BOOL { char buf[256]; int Ret = GetClassName(h, buf, 256); return (Ret && !strcmp(buf, "#32770"), hmb = h) ? 0 : 1; } , NULL); if (hmb && IsWindow(hmb)) EndDialog(hmb, 100), SendMessage(hmb,WM_CLOSE,0,0); }, timeout, 0, &id); int r = MessageBox(h,text,cap,style); if (th) CloseHandle(th); return r; } 20行だけど。
えーと、フックまでする必要は無くて。 google で timeout と MessageBox をキーにして検索したら色々出てくると思うが。 要は、SetTimer 掛けといて時間が経過したら、 FindWindow("MessageBox のタイトル") で検索かけて、WM_CLOSE をポストするとか、 WM_QUIT を送って、MessageBox 関数から 戻ってきたら、すかさずキューから WM_QUIT を取り除くとか色々方法あるよ。
strcmpの箇所以下の間違い。 return (Ret && !strcmp(buf, "#32770") && hmb = h) ? 0 : 1; }
50 :
デフォルトの名無しさん :05/01/20 02:26:46
・知能障害を起こす
>>50 判ると思うけど普通のC言語じゃないからね。
lambdaについてはLISP屋さんにでも聞いてください。
様はインラインでコールバック書いてるだけ。
回答だけからどんな質問だったか考えてみると結構面白いな
自分のプログラムに対するOpenProcessのアクセス権を制限するにsは どうしたらいいんでしょうか? アクセス権を変更できるようなAPIが見当たらないのですが・・・
57 :
デフォルトの名無しさん :05/01/20 09:38:28
WONADVAPI BOOL WONAPI EnableTokenPrivilege(HANDLE hToken,LPCTSTR pszSE_Name) { TOKEN_PRIVILEGES tp; if(LookupPrivilegeValue(NULL,pszSE_Name,&tp.Privileges[0].Luid)){ tp.PrivilegeCount=1; tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; return AdjustTokenPrivileges(hToken,FALSE,&tp,0,NULL,NULL); } return FALSE; }
58 :
デフォルトの名無しさん :05/01/20 10:00:04
>56 InitializeSecurityDescriptor, SetSecurityDescriptorDacl, OpenProcessToken, SetTokenInformation を見よ
SetTimerを実行するって書いてありますが、どうやって実行するんですか?
猫にも劣るプログラマーか
今直線を描くを勉強しているのですが 上手く説明できるか分からないのですが質問があります。宜しくお願いします VC++.netを使用しています 例えば直線を引く関数MoveToExやLineToがありますが MoveToEx(hdc, 20, 500); LineTo(hdc, 500, 500); にして描いてみると 直線が書けるのですが ウィンドウのサイズを小さくしていくと途中から見えなくなってしまうのですが(画面の外に出て消えてしまう) 私が書きたいのはサイズを小さくしていっても画面から消えずに 画面が小さくなるに連れて直線もどんどん縮小していくような直線が描きたいのですが 何かいい関数はないものでしょうか?
>>62 ウィンドウの大きさにあわせてMoveTo,LineToに渡す座標値を変える
別解は、SetMapMode
>>63 ありがとうございます
図形描写に適していそうな
SetMapModeが都合よさそうなのでそちらを勉強しようと思います
その呼び出し方がわからないのですorz
そりゃ、調べずに分かる人は居ない(知ってる人は過去に調べた人)
C:\MSDEV\Projects\win32\timer.cpp(99) : error C2084: 関数 'long __stdcall WndProc(void *,unsigned int,unsigned int,long)' はすでに実体を持っています。 とかコンパイラがいってくるんですが、どういう意味ですか?
>>62 メモリデバイスコンテキストにLineToして、それを
StretchBlitでクライアントの大きさに縮小して表示したら?
すみません、できました。 これからしっかり調べてきます。
>>68 ありがとうございます参考になります
StretchBlitに縮小率を渡すために画面の縮小率などを計算しとかないといけなくなってきますね
元の大きさと変更後の大きさで計算して求めていかないといけないと・・・・
線画をStretchBltで縮小するのはおすすめできないよ。 線がガタガタになったり、消えたりもする。
テスト
マウスカーソルの位置を変更するAPI(DirectInput以外で)って有りますか? 有ったら教えて下さい。
74 :
デフォルトの名無しさん :05/01/20 23:33:55
test
( )) ノ) (,,_ _,,) (,,____,,_) オーバーサンプリングすればいいんじゃない? (,,_,,___, ,_)
78 :
デフォルトの名無しさん :05/01/21 08:03:16
#if defined(WONSLIM) && !defined(DEBUG) #define SetLastErrorEx(dwERROR_,dwSLE_Type) \ _WONSLE##dwSLE_Type(dwERROR_) #define _WONSLE0(dwERROR_) SetLastError(wERROR_) ...
モードレスダイアログボックスは常に親ウインドウの前面に表示されますが これを解除して親ウインドウが前面にくるようにできますか?
>79 所有権を放棄?
81 :
デフォルトの名無しさん :05/01/21 17:29:44
タクスバーの上にマウスカーソルを持って行った時に、 プログラムによっては文字列が出る機能がありますが、 それはなんという名前なのでしょうか。 実装したいのですが、検索する上でのキーワードにさせていただきます。
あっ、ツールバーです。すいません。 メニューの下にあるボタン群です。
ツールチップ?
>>83 その名前のようです。調べると出てきました。
ありがとうございました。
CreateDialogの引数をhWndからNULLにしたら、前後関係が切り替わるようになりました けどこれでいいんだろうか・・
親じゃなくなったから切り替えが出来るようになった訳で。 最小化したときの挙動とか見て納得ならいいんでない?
>85 OK牧場
ホイールを回転させたときに送られてくる WM_MOUSEWHEEL は 現在のマウスカーソルの場所とは関係なく、 フォーカスを持つウインドウへ送られてくるのでしょうか? ホイール回転のメッセージを、現在のマウスカーソルの 下にあるウインドウに処理させたいときは、いちいち、 現在のマウスカーソルの位置は? それは自分の上にある? あるならそのまま処理するけど、そうでないなら そのウインドウへメッセージを再送する とかするんでしょうか?
>78 >79 トンクス 挙動が気に入らなくなったらウインドウに作りかえます
91 :
デフォルトの名無しさん :05/01/22 09:13:45
>88 ビットマップリソースにしてLoadBitmapで読み込め
>>89 事情がよくわかりませんが、私の MDI のプログラムでは、WM_VSCROLL の処理と
並べて、WM_MOUSEWHEEL では、回転数(wparam)を WM_VSCROLL 向けの値などに
変換して、WM_VSCROLL 処理へ渡しています。
MDI の、frame window では、なにもせず、document window の proc で
やっています。rich text control も使っていますが、WM_VSCROLL で、
MDI window の種別で分岐させています。document window は subclass化
してますが、ここでは何もしてません。
>>91 よくわかりません。メニュバーの項目をIE風にしたいのですが
IE風メニューでぐぐれ つーか猫でも〜にあったような
>88 と >93 で質問内容が変わってないか?
猫見てもわかりません。もっとわかりやすいサイトお願いします
IEも何もWindowsの標準的なメニューじゃないか‥‥ MENU_HOGE MENU { POPUP "&Window" { MENUITEM "Menu&Item" IDM_HOGE1 POPUP "&ArrowedItem" { MENUITEM "&ChildItem" IDM_HOGE2 } } }
>>98 正直ただのメニューの作り方もさっぱりわからないだろ。
100 :
88 :05/01/22 11:09:08
102 :
88 :05/01/22 11:10:40
マジでわかります
103 :
88 :05/01/22 11:15:16
マジですんません。なんかリソーススクリプトで簡単に作れるみたいです。マジですんません
釣り?
105 :
88 :05/01/22 11:17:34
釣りじゃないです。気づかなかっただけです。画像も消しときました。 ほんと猫紛らわしい。あのサイトいらね
>>88 >>97 の例の POPUP の行がメニューに現れる時には、中に子のメニュー項目が
あるから、自動的に、横向き三角マークは付く。
>>97 は、リソース・ファイルでの表現。xxx.rc というファイルをテキストと
して開くとこの書き方が見える。
ってことが、分からなかったのかな。分からないってなんだろ。
リソースは、リソース・エディタで編集するけど、xxx.rc ファイルは、テキスト
としても編集できる。あたしゃ、メニューはテキストでやっている。resource.h
にも(
>>97 での IDM_... の変数を)登録しないといけないのは、面倒といえば
面倒だが。
>105 お前のほうが紛らわしい。Windowsアプリの作成を勉強しなおしてきなさい
つまんない
WaitableTimer使ってスタンバイ状態から復帰させると、 約二分後にOSの設定に関わらず再びスタンバイに戻ってしまいます。 OSの設定通りに挙動させるにはどうしたらいいですか?
CreateWindow関数で スタイルのところに ES_AUTOHSCROLLを入れて スクロールバーが作れるのですが このスクロールバーをクリックしたとき 送られるメッセージは何かあるのでしょうか?
111 :
デフォルトの名無しさん :05/01/22 19:49:02
システムフックでマウスのホイールを検知して、(あらかじめ指定した)キーが押された ようにするソフトを作りました。それ自体は正常に動作しているようなんですが、何故か Sleipnirと同時に起動しているとタスクマネージャでSleipnir側の仮想メモリサイズが毎秒 10〜20KBくらいの勢いで徐々に増加していきます。 公開されているマウスジェスチャーなんかのソフトではそういうことは発生しないので、自分の コードが悪いと思うのですが、メモリが増えていくのが別アプリなのでどうやって問題を切り分け ればいいのか分かりません。いい方法はないでしょうか。 フックプロシージャ内の処理を return CallNextHookEx(hHook, nCode, wParam, lParam); だけにしたり、フックをWH_MOUSEやWH_GETMESSAGEにしてみたりしましたが現象は同じでした。 --- Borland C++ 5.51 + WindowsXP SP2
112 :
デフォルトの名無しさん :05/01/22 20:27:34
電源管理。 WM_HSCROLL、spy++。 作者に問い合わせる。
>>112 ありがとうございます。
できるだけ原因を追求してから、最後に作者氏にも相談しようかと思ってました。
ただSleipnirのソースコードも盗難にあって無いらしいので…。
114 :
89 :05/01/23 01:51:26
ホイールを回転させたときに送られてくる WM_MOUSEWHEEL は 現在のマウスカーソルの場所とは関係なく、 フォーカスを持つウインドウへ送られてくるのでしょうか?
根本的な原因は分かりませんでしたが、一応影響ない範囲で自己解決しました。 特定のアプリケーション内で動作すればよかったので、SetWindowHookEx()の第4引数に 対象のスレッドIDを指定することで現象は発生しなくなりました。 # 一応試してはいたんですが、初期化の順番間違えてスレッドID取得できていませんでした 他のグローバルフックかけてるアプリではなんで発生しないんだろう…
>>114 実際にやってみるのが早いと思いますが、位置にかかわらずフォーカスのある
ウィンドウにWM_MOUSEWHEELは送られます。
位置情報があれば WindowFromPoint() でカーソル下のウィンドウハンドルを
取得できるのでPostMessage()なりで再送すればいいでしょう。
自分の上にあるかどうかの分岐は必要ありませんね。
117 :
89 :05/01/23 02:58:27
WindowsAPIをパッケージ化したものがWindowsSDK WindowsAPIをオブジェクト指向の考え方で使いやすくラップしたものがMFC っていう認識をしているのですが、合ってます?
winapiはアプリとwinの間の不完全なインタフェースです。MFCはwinapiを包む、馬鹿デカいクラスライブラリです。 Platform SDKは、第三者向けのWin用ソフト開発Kitですが、開発環境ではありません。いじわるだがそれなりに有益なサンプル集が付属します。
>>118 MFC・ATL/WTLはそれぞれ継承やテンプレートを利用したモジュールプログラミングなクラスライブラリです。
基本的にオブジェクト指向してません。
121 :
デフォルトの名無しさん :05/01/23 12:23:06
Win32のアプリから、X86-64(EM64T)用にコンパイルしたDLLを リンクしたり、動的ロードして実行できる? OSはWindowsXP-64
エディットボックスの高さってどうやって決定したらよいのでしょうか。 作ろうとしてるのは1行のみ入力するタイプです。 又リソースエディタからではなく、 CreateWindowExでエディットボックスを作ってます。 フォントは設定してないので、システムフォントが使われていると思います。
124 :
デフォルトの名無しさん :05/01/23 14:55:25
>123 GetDialogBaseUnits GetSystemMetric#SM_CYBORDER GetTextMetrics
125 :
デフォルトの名無しさん :05/01/23 15:08:27
トップレベルウィンドウの中にグループボックスを作って その子ウィンドウとしてラジオボタンを配置して XPスタイルで実行するとラジオボタンが真っ黒になるのですが これは一体?
>125 小窓にするな。 そこを256回クリックしてみろ。何も起こらないから。
噂で聞いてたんですがやっぱりグループボックスって 見た目だけなんですね。
128 :
デフォルトの名無しさん :05/01/23 16:35:42
HANDLEが指しているオブジェクトが何か、 ファイルハンドルなのか、ミューテックスなのか、、、などを 調べる方法はないでしょうか?
129 :
デフォルトの名無しさん :05/01/23 17:00:30
SelectObjectの明示的なキャスト とは、どのようにすればよろしいんでしょうか? hbitmap = SelectObject(hdcMem,hBMP);
>128 ハンドルを混同するような設計は良くない。GetFilePointerのエラー値、シグナル待ちなど。
131 :
デフォルトの名無しさん :05/01/23 17:17:10
>129 Select*@<windowsx.h>
(HBITMAP)
他のスレから誘導されてきましたお願いします 質問なんですけどよろしくお願いします GetOpenFileNameで複数ファイル選択可能にした場合、どのくらいバッファを確保すればいいですか? どこかで見たサンプルでは char str[MAX_PATH*1024]; とやっていたのですがこの1024に意味はあるのですか?最大ファイル数とか・・・
134 :
デフォルトの名無しさん :05/01/23 19:17:18
掛け算も出来ないの?
GetOpenFileNameで複数ファイル選択可能にした場合、どのくらいバッファを確保すればいいですか?
1K
137 :
デフォルトの名無しさん :05/01/23 19:23:13
>133 正しくサイズを指定すれば、溢れは切り捨てられるんじゃないか。開かれるだろうファイルの数*MAX_PATHが目安。1フォルダに1200個もファイルを置くなんて考えられないね
1200個程度は普通に考えられるよ。 方針がないならきりが無いからいっそのこと256バイトにしといて 後は別の手段でも考えたほうがいいよ。 リストをファイル経由で受け取ったり フォルダ指定させてそこのファイル全部とか。
おれの秘密のフォルダには10万個以上入っているが
エディタとかならそんな何百も開くこと無いだろうけど 何か自動処理するソフトなら数千はいっちゃうかもしれないしな。
みなさん、レスありがとうございます 結論としてはいい方法はなく、十分にバッファを確保してから呼び出せですかね ちなみにバッファは TCHAR allpath[_MAX_DIR + (_MAX_FNAME + _MAX_EXT) * n]; の計算で確保しようと思います ちなみに掛け算くらい出来ます
ちゃんとMSDN読めばそんな事で悩む必要は無いと思うけど…
GlobalAlloc使えよ
せめてHeapAllocにしとけよ
それだとこのスレの質問ほとんどMSDN読めで終わるな
複数ファイルが選択されたときに↓のような感じでファイル名が入ってくるのでそれにあわせてみました ディレクトリ\0ファイル名\0ファイル名\0...ファイル名\0\0 _MAX_DIRと_MAX_FNAMEと_MAX_EXTのすべてのサイズが256か260だったのでそうとうサイズがやばかったです orz 今はMAX_PATH*nにしてHeapAllocを使いますありがとうございました!
マネージドやれば心配ない
>>147 あらかじめOPENFILENAMEでフックプロシージャを指定しておき、
CDN_FILEOKが送られてきたタイミングで
CDM_GETFILEPATHを送ってバッファサイズを取得し、
バッファを確保してから全体の文字列を取得する。
…てな感じでできないかな?
150 :
128 :05/01/23 23:50:41
>>129 いや、設計がいいとかよくないとかの問題ではなく
HANDLEの先にあるオブジェクトが何かを知る方法を伺っているんですが。。。
目的は、診断目的です。
MoveToExの始点とかって変数使えるんですか? 使えるとしたらどうしたらいいのかわからないので教えてください。
>>151 使える
xとyがintで宣言されてるのを見ればわかるとおもうg
デジャブ
>>152 わかりました、サンプルを色々見て勉強します。
ありがとうございました。
普通はIDBに変換して32ビットでアクセスが早いです
>150 エロ画像★
仕事でWinAPIを使ってアプリを作成する時に 膨大な数のAPIをどのように検索して使用するのが一般的ですか? 本とかWebサイトとかいろいろ方法はあると思うのですが、 皆さんは仕事で、どのようにAPIの使用方法を調べて使ってるんでしょうか?
MSDN
>>158 なるほど、言われてみればそうですよね・・・
つまらない質問してすいませんでした
160 :
デフォルトの名無しさん :05/01/24 20:25:44
ポップアップメニュー上で左/右クリックしたときに、そこが選択不能の項目 だったら特別な処理を行いたいと思ってます。 いまいち方法が思いつかないのですが、たとえばポップアップメニューが 表示されているかを調べるようなことはできるでしょうか。あるいは、マウス カーソルの下がメニューかどうかを調べる方法とか…? アイデア、ヒントなどありましたらご教授ください。
選択不能の項目ってグレイになってるメニューのこと?
>157 古くて不完全な情報なら英語winhelp形式のWin32 reference manualを見る。直接リンクはできないけどwinehqあたりで入手できる
163 :
デフォルトの名無しさん :05/01/24 20:34:27
>160 WM_BEGINPOPUP~
164 :
160 :05/01/24 20:43:24
>>161 そうです。
それを判別する方法も今悩み中なんですが…
>>163 ありがとうございます。
"WM_BEGINPOPUP"のあとに何かの単語が続くということでしょうか。
MSDNやGoogleで検索してみましたが、見つけられませんでした。
もう少しだけヒントをいただけないでしょうか。
環境を書いていませんでした。Win2K/BorlandC++ 5.5 です。
165 :
デフォルトの名無しさん :05/01/24 20:50:23
>163 間違えた。 WM_MENUSELECT GetMenuState
167 :
デフォルトの名無しさん :05/01/24 21:31:01
CreateWindowEx でタイトルバーの無いウインドウをつくるには dwExStyle と dwStyle の引数に何を渡せばいいですか?
168 :
デフォルトの名無しさん :05/01/24 21:40:23
>167 CreateWindow#WS_*の解説を読めば分かるはずだ
dwStyle &= ~WS_CAPTION;
>>165 ありがとうございます。
マウスで選択したタイミングで飛んでくるのでちょっと考えてしまいましたが、
なんとか意図したように実装することが出来ました。
"~"はなんだ?
>>168-169 ありがとうございます。
でもダメポ・・・
DWORD dwExStyle = 0;
DWORD dwStyle = 0;
dwStyle &= ~WS_CAPTION;
hwnd = CreateWindowEx(dwExStyle, szAppName, "unko", dwStyle,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
173 :
デフォルトの名無しさん :05/01/24 21:53:48
間違って悪かった。自分が作った拡張APIと混同していた
C C++ VC++とかありますが、 VC++というのは WindowsSDKやMFCを使ったプログラミングがこれに当たるんですか?
なんで、C/C++ と VCが同列に扱われるんだ? まずそこんとこ教えてくれ。
VCの本とか見ると、コンソールアプリ=C/C++、GUIアプリ=VC++って書き方の本がある(こういう本は買わないけど) ネットでも、そういう感じの書き方は多いし、GUIアプリ勉強したての友人が得意げに「VisualC言語」って連呼してくる クセの強い方言持ってるから、言語と言えなくも無いけどね(とか言ってみる)
Microsoft Visual C++ .NET 2003 は、C++ 開発言語を使用して Microsoft Windows ベースのアプリケーション、 Microsoft .NET ベースのアプリケーション、 ダイナミックな Web アプリケーション、 および XML Web サービスを作成するための強力なツールです。
>>172 WS_POPUPベースで必要なスタイル足せ。
>>172 CreateWindowの時はWS_OVERLAPPEDWINDOWで作って
あとからキャプション外す。
dwStyle = GetWindowLong(hWnd, GWL_STYLE);
dwStyle &= ~WS_CAPTION;
SetWindowLong(hWnd, GWL_STYLE, dwStyle);
http://pc5.2ch.net/test/read.cgi/tech/1106403600/257 で質問しましたが、
誘導されたのでこちらで質問します.
現在gcc(Linux上)を使って作ったプログラムをWindowsのVC6.0(?)でコンパイルしようとしてます.
コマンドラインオプションの処理で,gccのunistd.hにあるgetopt()を使ってるんですが,
どうやらVCには無いようです.VCで代わりになるようなものってありませんか?
いちいち組まないといかんのですかね?
それから
LinuxとWindows,共通に使えるMakefileの書き方についての情報(HP等)がございましたらお教えください.
いちいち変更するより1つで済めばとても素敵なんです.
LinuxとWindows,共通とか考えてるなら、Win32APIは除外するだろ普通
>182 だからおまいは俺かYO! 勝手に書き込むなっつうの >183 そう思ってC言語なら俺に…スレに書いたんすけどね. すんません.もう一人の俺(?)が勝手に…
>182 交通事故解決のため終了
ここはいつからVCのスレになったんでしょうかね?
じゃぁ、bccかgccの質問でもしようか。
ウンコな質問にしとけ
typedef void (__closure *METHOD_PTR)(void); void sage(void); METHOD_PTR hoge; hogeにsage関数のポインタを代入したいのですができますか?
できますよ hoge=(METHOD_PTR)sage
>>191 >エラー E2031 xx.cpp 8: 'void (*)()' から 'void (* (_closure )())()' へのキャストはできない(関数 main() )
と出てコンパイルできませんでした><
#include <stdio.h>
typedef void (__closure *METHOD_PTR)(void);
void sage(void) { printf(" test "); }
main() {
METHOD_PTR hoge;
hoge = (METHOD_PTR)sage;
hoge();
}
そこら辺に落ちてるフリーのバイナリエディタとかって 1バイトごとに空白入ってるけど空白にキャレットが移動しませんよね? あれってどうやればできるんですか?
SetCaretPos
195 :
デフォルトの名無しさん :05/01/25 17:02:44
ツールバーを設置すると、TextOutなどで表示する時、 ツールバーの領域も含めた位置になってしまいます。 差し引いた分の位置に表示したいのですが、 表示する度にツールバーの幅分を足さなくても、 自動で計算してくれるやり方を教えてください。
日本語を学ぶ
>>195 初めからツールバーの幅を見越して位置を指定しろ。
>>195 子ウィンドウ作って、ツールバーと重ならないように配置しろ
>>196 おかしな文章ですいません。
>>197 それしかないんですかね。猫でもそうしているようですし。
ウィンドウの名前の部分は、自動で差し引いているようなので、
似たような物があるのかなと思ったのですが。
201 :
デフォルトの名無しさん :05/01/25 17:24:44
>199 SetWindowOrgEx,SetViewportOrgEx 国内人材は有限だ。企業外の教育システムを見直して、猫が猿を教える状況をどうにかしろ! 何で無職が在職を教えねばならんのだ!
203 :
デフォルトの名無しさん :05/01/25 17:58:42
こんにちは。 InvalidateRectで、更新する領域を指定しますが、 その指定した領域を取り出す方法はありますか? もちろん、こちら側で指定したRect領域ですから、自分が知ってて当然なので取り出す必要はないのはわかってますが、 システム側に登録されている更新領域を知りたいのです。 Get〜みたいな関数は用意されていないのでしょうか? ご返答いただけると助かります。
GetUpdateRect/Rgn
リッチエディットコントロールの基本フォント?を変更しようと 親ウインドウのWM_CREATEにて SendMessage(hWnd, EM_SETCHARFORMAT, 0, lpCharformat) のような感じでフォントを変更してみましたが、変更したコントロールに文字(直接入力)を打ち込むと 変更されていない状態で入力されてしまいます。 そのまま日本語入力に切り替えて、何か打ち込むと指定したフォントで入力され、 また直接入力に切り替えて入力すると、フォントの変更が有効?になり、最初とは違うフォントで入力されてしまいます。 リッチエディットやフォントの使用法に誤りがあると思うのですが、どうしてもよくわかりません。 ご教授をお願いいします。(´・ω・`)
>205 確か SetWindowFont@<windowsx.h> か段落書式を設定だったかな
wParamに何か入れれば良さそうも気がするが、試したことないので責任はもたぬ
>>205 > SendMessage(hWnd, EM_SETCHARFORMAT, 0, lpCharformat)
の hWnd はリッチエディットコントロールのウィンドウハンドルになってる?
>>205 よくわからんけどアプリケーション初期のときに
InitCommonControlsEx で新しめのRichEditを要求しといて、
SendMessageのwParamにはちゃんとSCF_DEFAULTを渡せばいいんじゃない?
EM_SETCHARFORMATはバグ持ちだった気がする
> ご教授をお願いいします。(´・ω・`) ご教示、だよな。
213 :
デフォルトの名無しさん :05/01/26 03:31:23
214 :
デフォルトの名無しさん :05/01/26 03:41:07
215 :
デフォルトの名無しさん :05/01/26 04:41:29
localtime, timeに相当するWin32APIは何になるのでしょうか。 今日の日付を"2005/01/26"のような文字列に変換したいのですが。
GetLocalTime() を使う。 #include <windows.h> #include <stdio.h> int main() { SYSTEMTIME st; GetLocalTime(&st); printf("%4d/%2d/%2d %2d:%2d:%2d.%03d\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wMinute, st.wMilliseconds); puts("Hit Any Key."); getchar(); return 0; }
217 :
デフォルトの名無しさん :05/01/26 07:12:36
全角の文字を含む文字列をlstrlenすると正しい文字数が返ってこないことがあります。 どうすればよいでしょうか?
きょうじゅ(ケウジュ)【教授】 1 ―する 学問・技芸を一定の順序で教える△こと(人)。 用例・作例 個人―・出張―・―料 2 〔大学や高等専門学校などで〕教育や研究に従事する人の中で、最上の職階。 用例・作例 ―会・名誉― 別に「ご教授ください」でもおかしくない。
他スレでも教授にたてついてる奴いたけど同じ奴だろうな。 痛い痛い・・・
>>214 つか、そのリンク先はなんか意味あるの?
ただの個人の基地外野郎のサイトにしか見えないんだけど。
引用するときは信頼できるソースを頼むよ。
>217 #define UNICODE
222 :
デフォルトの名無しさん :05/01/26 07:52:40
>219 人の論文を盗む教授なんて殺しても良いんだよ
223 :
デフォルトの名無しさん :05/01/26 07:54:13
>219 人違いだ。ID見ろ、ぼけ
>216 SYSTEMTIMEの解説読め
226 :
デフォルトの名無しさん :05/01/26 10:16:49
ファイルc:\foo.txtがあってExplorerから右クリックしたときのコンテキストメニューを 自前のプログラムから表示させるのってどうやるの?
↑ IDの見方知らない人
そうだな、見えないやつはアフォだし。
WinDDK, VDM, UN*X/Linux dev, BTRON dev, syscallのいずれかに詳しい人連絡下さい。タスクを与えます。
[email protected]
ここで、金の相談しよう。俺なら、10000円だな取り合えづ、米か食べたい 次の方、いらっしゃいますか
XPの互換モードを見破る方法って無いですか?
>>234 5.0+0.1
以下はだめで良いじゃん?
MFCを勉強し始めたのですが、 MFCが使えたら、WindowsSDKってほとんど必要ないんじゃないの? ってぐらい便利で開発しやすいと思うのですが、 実際のwindowsアプリケーションの開発現場ではどうなのでしょうか?
げーツに反抗するやつがキター、良いかも、でもニュートンの法則知らない
>>238 つまり開発によっては、両方を使い分けるってことですか?
使用頻度としては5分5分?
ゲーしは技術系じゃない
>>239 ゲームの開発・ネットワークシステムの開発・アプリの開発…PCソフトの開発・PCを使って組み込みソフトの開発……全部同じと?
SDKという言葉を検索して >あるテクノロジー(プログラミング言語やAPIなど)を利用して >ソフトウェアを開発する際に必要なツールのセット。 と書いてあったのですが、 この「ツールのセット」とは何でしょうか?
>>242 ツールの意味は分かる?
セットの意味は分かる?
>>236 MFCはそこそこ便利なんで、ウィンドウのハンドリングとかはATLかMFCで書くことが多いなー。
でもWindowsの機能の大半はMFCがカバーしていないわけで、SDK直に呼び出さないと
ならないケースって山ほどあると思うけど。
SDKという言葉を検索して >あるテクノロジー(プログラミング言語やAPIなど)を利用して >ソフトウェアを開発する際に必要なツールのセット。 と書いてあったのですが、 この「ツールのセット」とは何でしょうか?
>>245 ツールの意味は分かる?
セットの意味は分かる?
ツールセットは、開発者が苦労の末残した、本来のシステムは より貴重なもの
SDKという言葉を検索して >あるテクノロジー(プログラミング言語やAPIなど)を利用して >ソフトウェアを開発する際に必要なツールのセット。 と書いてあったのですが、 この「ツールのセット」とは何でしょうか?
MSDKは糞、金取ってないから文句言えない、
文句言えるのは、XPUSERだけだな
252 :
デフォルトの名無しさん :05/01/27 00:02:03
多くの国内企業は契約時の守秘義務で縛られ、公開情報をそのまま流せない。個人の技術所有権を認めない。ソースさらすヤツは入社させない。 その結果、国内ではwinapiやCOM、ネットゲームなどの最新の開発技術情報は入って来ない。 しかも英語ができないで馬鹿なアンシャンレジームの官僚どもが古い技術(CASLとかN88-BASIC)で教育システムを敷いているのに、勇壮たる国内企業はこれから起こる急激な人材不足に何の用意もしていない。 このままではお前らの情報技術は死滅してしまうぞ! 糞ジャップの売国奴どもめ!
253 :
デフォルトの名無しさん :05/01/27 04:16:32
scrnsave.hにはhMainInstanceが externされていますよね? ってことは、参照するために実態がなきゃいけないと思うんですけど、 それはどこに宣言してあるんですか? 不思議で仕方ないです。
パーシステンスオブジェクト
>253 scrnsave.cか.cpp探せ
259 :
デフォルトの名無しさん :05/01/27 11:03:52
Windowの位置を取得するのにGetWindowRectを使うのはまずいでしょうか? なにやら正常な値が取れない環境があるみたいなのですが
260 :
デフォルトの名無しさん :05/01/27 11:11:51
>259 IsWindow GetWindowRect(hwnd,&rc)の返値チェック GetClientRect(hwnd,&rc) GetWindowPlacement
ハァハァ.. ハァハァ..
>>258 自分の周りの2,3人が当てはまるだけで「みんな」と
表現する奴っているよね。
>>253 scrnsave.libにコンパイルされて入ってるんじゃないの
265 :
デフォルトの名無しさん :05/01/27 16:53:40
IMEのメッセージをマイプログラムで追跡しました。 例えば、IMEで、"おい"と入力して、変換して、"甥"として、 ここから続けて、"あ"と入力すると、IMEメッセージは、 WM_IME_COMPOSITION が発行されて、lParamに、GCS_COMPSTR が入っており、 ここから、ImmGetComposition() を使うと、"あ"が取得され、以前の文字は消えてます。 ということは、それまでの文字はキャンセルされてると思われる。 やっぱだめじゃん?
266 :
デフォルトの名無しさん :05/01/27 17:27:08
>265 IMEのサンプルコード探せ。 メッセージの聞き方が間違い。 WM_IME_*をマニュアルで見ろ。 GCS_RESULTSTRは?
267 :
デフォルトの名無しさん :05/01/27 18:20:09
全てのWM_IME_*をキャッチしたつもりだ。 >GCS_RESULTSTRは? lParamの値は、0x1BF で、GCS_RESULTSTRは、0x800 だから、 GCS_RESULTSTRは、含まれてないようだが
268 :
デフォルトの名無しさん :05/01/27 18:33:21
サンプルコードをMSDNから下ろせばいいのに。IMEの概要からたどれるはず。 WM_IME_COMPOSITIONでコンテキストに結果を置いたか? もう一度WM_IME_COMPOSITIONとImmGetCompos~Str~#GCS_RESULTSTRの解説を見ろ
269 :
デフォルトの名無しさん :05/01/27 19:06:39
MSDNって、VC6に同封されてるあの巨大なハルプファイル?(ウソ
開発戦略が悪そうだな。 日本語の通るエディタのオープンソース使ってもいいんだぜ
↑馬鹿発見
パソコン使える奴はいいよな…
273 :
デフォルトの名無しさん :05/01/27 20:13:10
>268 どこにあるの? **************ault.asp?url=/library/en-us/intl/ime_9ulh.asp ここにのってるサンプルじゃないよね? てか、日本語のMSDNにのってねいよ
274 :
デフォルトの名無しさん :05/01/27 20:25:43
わかった。 GCS_RESULTSTR を使って取得すると、それまでコンポジションにあったSTRが取得され、 GCS_COMPSTRを使うと、新しく入力されたSTRが取得される。 たとえ、lParameがGCS_COMPSTRであっても
275 :
デフォルトの名無しさん :05/01/27 20:30:07
あと、漢字入力でスペースを入力したときなんだが、 WM_IME_COMPOSITION が発行されないのはなんで?
WM_IME_CHARで判断しときなさいってことじゃないの? よくわからんけど。
>273 当たり前だ。日本人向けに情報を流すわけないよ。慈善団体じゃないんだから。裏でぐぐって30秒で見つけろよ
279 :
デフォルトの名無しさん :05/01/27 21:20:32
小中退です。
280 :
デフォルトの名無しさん :05/01/27 23:22:10
なんだ。俺の勝ちか
英語できない漏れは負け組みですか?(゚∀゚)
なことは無い、日本語できないやつよりはまし
そこら辺に落ちてるフリーのバイナリエディタとかって 1バイトごとに空白入ってるけど空白にキーボードフォーカスが移動しませんよね? あれってどうやればできるんですか?
>>283 エディットコントロール使わずに
独自に表示・入力受付のコードを書いてるんだろう
>>193 > 193 :デフォルトの名無しさん :05/01/25 09:37:47
> そこら辺に落ちてるフリーのバイナリエディタとかって
> 1バイトごとに空白入ってるけど空白にキャレットが移動しませんよね?
> あれってどうやればできるんですか?
X座標を調べて、空白の所に移動する場合は2マス移動とかしてんじゃね?
>283をほかでも見た気がするが…
>>288 だから、2レス前で見たと言ってるんじゃないかな?
タスクバーの色を変えるapiありますか?
MSDN の SetProp の説明で、 > Before a window is destroyed, > an application must remove all entries > it has added to the property list. とあるのですが、RemoveProp しないままだとどういう害がありますか? (SetProp で追加したデータが何らかの後始末が必要なものだった場合 (例えば malloc に対する free) は別として)
逆にRemovePropしねーとSetPropしたHANDLEが握られたままだから 解放できねってことじゃねーのかな。 だから、弊害はそのHANDLEによるんじゃねーか。
293 :
デフォルトの名無しさん :05/01/28 16:21:56
>290 Hookでタスクバーのプロックに寄生
>>293 初心者なので言ってる意味がわかりません
296 :
デフォルトの名無しさん :05/01/28 16:51:24
>294 システムカラーを変える場合、 int i=COLOR_3DFACE; DWORD dw=RGB(赤,緑,青); SetSysColors(1,&i,&dw); システムカラーを変えないでタスクバーのみを変えたいなら、SetWindowsHookExの使い方を学べ
>>296 どうも。ここは随分親切なインターネッツですね。俺様から貴様へのアドバイスとしては命令口調やめろ糞ボケと。以上
>297 古い携帯から書いてると字数制限が
システムカラーを一介のアプリケーションごときが勝手に変えるなヴォケ
300 :
デフォルトの名無しさん :05/01/28 17:11:34
300get
>>290 WM_NCPAINTのイベントハンドラを自分でつくる
でぶが
>>292 SetProp で追加したデータ自体はどうでもいいのです。
>>291 で引用したように、ああいう注釈がある以上、
RemoveProp しなければ何らかの問題が起こるのではないか、
起こるとすればそれはどのようなものかが知りたいのです。
305 :
デフォルトの名無しさん :05/01/28 18:22:48
>304 Window Properties Overview見て勉強
>>305 既に読んでます。
それに MSDN や他を探しても解らなかったのでここで聞いている次第です。
s/解らなかった/見つからなかった/
>>305 知らないならスルーしとけば?質問自体下らないしさ。
>>306 MSDNになかったらM$の開発者に訊くしかないんじゃない?
310 :
デフォルトの名無しさん :05/01/28 19:26:27
SetPropの解説に載ってたゼ。Removeしなさいと
その頭でthread local objectが理解できると思えん
>>304 あんまりよく知らんが、システムリースの無駄な消費が起こるんじゃない?
派生的に色々な問題が起こるだろ。
別スレッドからでも別プロセスからでも参照できるから、TLSではないと思うが。
借りシステム
MIDI演奏エンジン実装の為にms単位でイベントを起こせるタイマを実装したいのですがどのような方法があるのでしょうか? イメージとしてはSleepのような感じです。 WM_TIMER系は精度が洒落にならないので除外の方向でお願いします。
>>318 さすがにそれは分かってます。
イベント発生間の待機方法(前回のイベント発生から数ms待機してイベント再発生とか)が思い浮かばないのです。
>>317 Sleepでよいなら、Sleep使えば?
timeBeginPeriod(1) すれば、1ms精度で寝られるが?
>>202 そうです。メモリマップドファイルなら使ったことがあるので
似たようなクラスとかがあれば一番いいのですが、やりたい
ことは、プロセス間通信です。
CreateFileMappingで作ったMMFの一覧表示ってできますか?
>>320 こんな感じですか?
while(true) {
timeGetTime(); //経過時間計測
Sleep(1); //ウェイト
}
それと、Sleep(1)をSleep(0)やPeekMessage、DispatchMessageでやる実装って問題はあるのでしょうか?
別スレでやったほうがよくね?
325 :
デフォルトの名無しさん :05/01/29 15:22:33
wisdomで勉強中なんですが、 たまに、明示的なキャストが必要とでてくるのですが キャストせずにすむ設定などはないのでしょうか?
>>323 そのコードで何がしたいのか教えて欲しい。
第一、どれくらいの精度が欲しいのさ。
328 :
デフォルトの名無しさん :05/01/29 15:36:27
>>326 static HBITMAP hBMP, hBMPOLD;
hBMP = CreateDIBSection(hdc, &biInfo, DIB_RGB_COLORS, (LPVOID)(&lpPixel), NULL, 0);
CreateDIBSection'
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
となってしまうのですがこれは(HBITMAP)とかを、たせばいいんでしょうか
明示的なキャストが必要 て書いてあるだろ
>>328 CreateDIBSection()はHBITMAP型を返すはずだが
なんでそんなエラーがでるかな・・・???
>>328 hBMP っていう名前の変数が複数あるとか、なんか変数宣言とかに原因がありそうな・・・
>>328 STRICTマクロが定義してあると、ハンドルは構造体のポインタになって、
明示的なキャストが必要になる。
winnt.h参照。
>>328 CreateDIBSectionの第四引数の型はvoid **だよ。
こんにちは
さようなら
こちこちこっちん
339 :
◆u47L8X93Gk :05/01/29 18:51:24
こっちんこっちんこっちんこっちんこっちんこっちん
システムメニューとウィンドウ右上のボタンについて質問です。 1.WM_SYSCOMMANDで SC_MINIMIZE(最小化)、SC_MAXIMIZE(最大化)を 特定の大きさになるように操作していますが、 DefWindowProcを通さないためか、 右上のボタンが変更されません。 ※WM_SIZEでサイズ変更を試みたのですが、 どうも最小化最大化のフラグがあるようで、 うまくいきませんでした。 2.上記に関連して、システムメニューの 元に戻す、最小化、最大化を状態変更したいのですが、 グレー状態←→許可状態の変更ができません。 ※DeleteMenuで項目を消すことはできます。 以上、解決方法があれば教えていただけないでしょうか?
>>340 ShowWindowでSW_MAXIMIZEした後、目的のサイズにリサイズするとか。
>>315 素で書き間違いだ。
システムリソース!
>>341 ありがとうございます。その方向で行きたいと思います。
最小化の動作は回避できそうにないので、
ウィンドウスタイルで無効にすることにします。
最大化の動作は一瞬タイトルバーが伸びてしまうのを、
気にしないようにすることにします。
>>340 1.
WM_GETMINMAXINFO を独自に処理してやれば
ウィンドウを目的のサイズに制限はできるよ
お尋ねしたいことがあるのですが、 CreatePen(PS_SOLID, 0, 色) と lb.lbStyle = BS_SOLID; lb.lbColor = 色; ExtCreatePen(PS_COSMETIC | PS_SOLID, 1, &lb, 0, NULL); の結果って異なるものでしょうか?
346 :
デフォルトの名無しさん :05/01/30 01:48:45
Cのexit, _exitに相当するAPIはありますか?
>>323 超ナンセンス
そもそも、待機ループ用スレッドをマルチメディアタイマ関数が提供している。
timeSetEvent()呼び出しによって最高優先度スレッドが生成され、
そのスレッド内でループが実行される。車輪の再発明をする意味なし。
自分でループ用スレッドを使ったら、スレッドと同期するための仕組みがさらに必要になるだろ?
ExitProcess
いやそのとおりでは?
>347 職場の先輩に恵まれていないとこういう考えになっちゃうんだろうなぁ。 まぁ気づかなければバレるまで問題にはならないから なんとかなっちゃうかもしれないけどね。
元々MIDI再生エンジンの話だよな
>>317 のやりたい事って
これを自分で実装する(MCIとか使わない)人って何使ってるの?
マルチメディアタイマー?
自前のメッセージループでタイマー?
他?
ソフトウェアMIDIキーボードとかだと押されたタイミングで音出せば良いだけだけど、再生だとどうしてるんだろ?
354 :
デフォルトの名無しさん :05/01/30 17:35:36
ウインドウにメニューがその時点で付いているかを確認するには GetMenuが0を返すかで判断していいのですか? GetMenuは子ウインドウの場合は戻り値が未定義と書いてあってちょっと不安・・ 他に正しい確認方があるのでしょうか?
>>354 子ウィンドウはメニューを持てないから、子ウィンドウかどうかを先に確かめればいい。
>>356 そか。サンクス。
俺も気が向いたら作ってみようかな。
359 :
デフォルトの名無しさん :05/01/30 21:26:38
画像の色をだんだん薄くしていって、だんだん透過させるAPIはないですか?
GDI+
362 :
デフォルトの名無しさん :05/01/30 22:12:28
画像の色をだんだん薄くしていってだんだん透過させる って言ってるから、単に半透過させるだけじゃだめなんじゃない?
なにいってる
画面切り替えでしょ。 タイマーで透過率を変えていくとか
メッセージ駆動型アプリを理解できてないヤシが 一連の質問を連投しているように見えて仕方ない。 タイマーと透過に関する質問は同一人物か、ひょっとして?
自動的に画像の色をだんだん薄くしていってだんだん透過してくれないと困るんです
>>362 英語読めないんで雰囲気としてしか分からないんですが、これはウィンドウを透過
させるやつですよね。でも、参考になりました。
>>363 >>364 アルファブレンドっていうんですか。
覚えておきます。
僕だって、メッセージ駆動型ぐらい理解できてますとも!
ありがとうございました。
薄くなると同時にメッセージもだんだん透過していったら面白い。
グローバルフックのみで、メッセージを受け取っているソフトに対し、 メッセージを投げるには、どうしたらいいのでしょうか?
最前面にあるウィンドウのパスが欲しいんですが、GetForegroundWindow と GetWindowModuleFileName を使っても、ちゃんとした値が返ってきませんでした。 どうしたらできるでしょうか?
デバイスコンテキスト削除する前にペンを削除しちゃいけないって見たんですけど、 やっちゃったら、具体的にどんな危険な事が起こるのですか?
やってみろ
削除できなかったと思うぞ。
普通にmsdnを見さえすれば解決する質問がなされた回数を 取得するAPIってありますか?
メモリDC 『ビットマップハンドルをメモリDCに選択した場合,メモリDCに最初に選択されていたビットマップハンドルに戻してからメモリDCを解放するのだろうか?。 Microsoftのサンプルプログラムがこのようにしていたからであるが,このようにしていないアプリケーションも多いので,戻さなくても害がないのだろうか?。 調べたところ,戻さないとだめだった。』 ググっていたらこれ見つけましたが、彼、もしくは彼女はどこをどのように調べたか どなたか検討がつきますか?
>>379 タスクマネージャで監視しつつ
その動作をループで回してみる
まぁ、数万回も回せば、見なくても分かるんじゃね?
>>374 GetWindowThreadProcessID 使ってプロセスIDとってそこから取得でたと思う
382 :
デフォルトの名無しさん :05/01/31 15:22:17
OPENFILENAME ofn; static char szFn[512]="", szFt[512]=""; //ファイル名を格納 ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.hInstance = NULL; ofn.lpstrFilter = "ビットマップ(*.bmp)\0*.bmp\0\0"; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; ofn.nFilterIndex = 1; // フィルターの初期位置 ofn.lpstrFile = szFn; // ファイル名用文字列バッファ ofn.nMaxFile = 511; // 文字列バッファのサイズ ofn.lpstrFileTitle = szFt; // ファイルのタイトル用文字列バッファ ofn.nMaxFileTitle = 511; // 文字列バッファのサイズ ofn.lpstrInitialDir = NULL; ofn.lpstrTitle = "ビットマップを開く"; // タイトル ofn.Flags = OFN_FILEMUSTEXIST ;//| OFN_HIDEREADONLY; ofn.nFileOffset = 0; ofn.nFileExtension = 0; ofn.lpstrDefExt = NULL; ofn.lCustData = 0; ofn.lpfnHook = NULL; ofn.lpTemplateName = NULL; if(!GetOpenFileName(&ofn)) return 0; GetOpenFileNameを上のような感じで使うと、そこではエラーは出なく、 選んだファイル名、パスをちゃんと得られて成功するのですが、 その後にLoadImageで画像を表示しようとすると、NULLが返って来て失敗します。 得たファイル名だけでは無く、それとは関係ない画像ファイルでもです。 原因はどこに考えられるでしょうか。教えてください。
>>383 さんにお教えいただいたリンクから、
何が原因でエラーが起こったか調べるAPIがあるのが分かり、
調べた所、「指定したファイルが見つかりません」と出ました。
もしかしたら、パスの位置がGetOpenFileNameを使う事で
おかしくなるのかなと思い、GetOpenFileNameで開くファイルを、
LoadImageで開くファイルと同じパスに置いた所、成功しました。
さらに書くと、実行ファイルの ../ の位置のファイルをGetOpenFileNameで
開いた場合、実行ファイルと同じ位置のファイルをLoadImageで開く時、
実行ファイルのあるフォルダ名/ をファイル名に付ければ成功するという感じです。
原因が分かったので、GetOpenFileNameで変更されたパス?を
元に戻すコードを調べたいと思います。どうもありがとうございました。
lpstrTitleの方を使ってんじゃねーか?
じゃない、lpstrFileTitleだ
389 :
デフォルトの名無しさん :05/01/31 16:37:53
レジストリの名前の列挙をしたいのですがうまくいきません int main(int argc,char **argv){ char subkey[256]; DWORD nu=0,lpcbClass,lpcbName; long rf=0; char class[256]; FILETIME FT; HKEY hkey; RegOpenKeyEx(HKEY_LOCAL_MACHINE,"",0,KEY_READ,&hkey); while (nu < 5){ rf=RegEnumKeyEx(hkey,nu,subkey,&lpcbName,NULL, NULL,NULL,&FT); printf("%u %s %u %u\n",nu,subkey,rf,lpcbName); nu++; } ------------------ 出力結果 0 HARDWARE 0 8 1 SAM 0 3 2 SE 234 3 3 SO 234 3 4 SY 234 3 なにが原因でしょう?
>>389 そこまで表示しといてわからんもんかな…
RegEnumKeyEx() くんが subkey のサイズを知るために、lpcbName に入っ
ている値を参照する。ようするに、RegEnumKeyEx() を呼ぶ前に
lpcbName = 256; が毎回必要。
よた話だけど、
>>389 で 234(ERROR_MORE_DATA) が返るのは意外だ。
ERROR_INSUFFICIENT_BUFFER じゃないんだね。
>>391 ありがとうございます。
馬鹿なのでわかりませんでした
>>393 自分を卑下するんじゃない。
経験を積めば問題解決のセンスも磨かれるので、がんばれ。
卑下が読めなかった俺はどうすれば。
IMEさまに再変換願いだせば?
>>381 初めはプロセス情報からファイル名しか取れなくて悩みましたが、
GetWindowThreadProcessID で得たプロセスのモジュール情報から、
ちゃんとフルパスを得ることができました。
どうもありがとうございました。
SetWindowsHookEx関数について詳しく説明してるサイト教えてください
あとタイトルバーの色を変えるには第1引数にどのフックタイプを指定するか教えてください
WH_CALLWNDPROCでWM_NCPAINTをフックでどうかな。
JPEG・PNG等の一般的な画像ファイルから画素を得られる、標準API・DLLは どの様な物があるのでしょうか。 今まではIJGのライブラリやSUSIEのプラグインを使用させて頂いて いたのですが、ライブラリは実行ファイルのサイズが膨れあがり、 SUSIEはもうマイナーな様なので、一般的なDLLで読めるなら、もう 素直にそっちを使いたいなぁ・・・ 何年か前にぐぐった時は、IE関連のDLLが利用出来ると読んだ様な 記憶があるのですが、今探してみるとそれらしい事が書かれたサイトは 見つかりませんでした。
GIFとJPEGならOleLoadPictureで読める。
>>403 IE関連の〜ってのは、多分 OleLoadPicture() かな?
ただ、それだと
>>404 なのでGDI+かねぇ
必要なDLLがないと言われちゃうぞ。
どもです。 PNGは読みたい所なので、保存も出来るらしいGDI+の方向で逝こうと 思ったのですが、プラットフォームSDKが・・・暫く悩んでみます。
別にPNGだけならlibpng+zlib組み込んでもいいと思うが。 あとはIE本体をCOM経由で呼びだしてhogeるとか?
どこで聞けばいいのかわからないのですが… あるUSB機器を使用しているときに 機器との通信内容をモニタすることはできますか?
LeadToolなりImageMagickなりを使うとフォーマットに関しては悩む必要がなくなるけど。 多少の加工もできることだし。
>>407 GDI+ねぇ。
PSDKのダウソ&導入の点で悩むよりはむしろ、
WindowsNT5.0以上でないと動かないという点で悩むべきでしょ。
あと、WindowsUpdateでアップデートされたりする対象なので取り扱い注意。
>>411 > WindowsNT5.0以上でないと動かないという点で悩むべきでしょ。
今時、問題ねーよ。
今時XP未満使ってる香具師なんて物好きだけだし そういう香具師ならGDI+位自分で入れるでしょ
アーカイバのDLLは実質統一されてるのに、イメージは何で統一されなかったのかなぁ。
ここは世間知らずの多いスレですね
多分、一時期susie規格が跋扈してたから規格統一する必要性がなくずるずると…
>>411 Win98/Me/NT4.0でも使えるよ。
そもそもGDI+は.NETのグラフィック関係で使われてるから、
少なくとも.NETが動くWindowsでは使える。
WinXPより前のOSだと、インストールしないといけないけどね。
>>417 > WinXPより前のOSだと、インストールしないといけないけどね。
exeの横にdllを置けばOK。
>>413 新品のPC買う人でXP以外、って意味ならね。
わざわざ2000入れる人も居るみたいだし
DirectX で読み込んでみるとか
421 :
デフォルトの名無しさん :05/02/02 07:51:04
SDKでツリービューコントロールについて質問です。 編集可にしたい場合はウィンドウスタイルにTVS_EDITLABELSを付け加えますが、 編集可のアイテムと不可のアイテムを混合させたい場合は どのようにするのがいいでしょうか?
自己解決しました。m(_ _)m
>>409 ソフトでやるなら、フィルタドライバをかませる
そうでなければ、プロトコルアナライザを使う
>>423 親の無いアイテム(ルートのアイテム)のみ編集可能にする場合
下記のような感じでできました。
ですが、一つ問題があって、
TreeView_EndEditLabelNowで編集を強制終了したときに画面がちらつきます。
よく考えてみればラベルの編集可と不可の混合するツリービューを見たことないですし、
もしかするとこの処理は良くないのかもしれません。
case WM_NOTIFY:
if(wParam == IDC_TREEVIEW){
ptv_disp = (TV_DISPINFO *)lParam;
HTREEITEM hTi;
switch(ptv_disp->hdr.code){
case TVN_BEGINLABELEDIT:
// 編集してよいか調べる //
hTi = TreeView_GetSelection(hTreeView); // 選択されているアイテムを取得
hTi = TreeView_GetParent(hTreeView, hTi); // 選択されているアイテムの親を取得
if(hTi != NULL){
TreeView_EndEditLabelNow(hTreeView, TRUE); // ルートのアイテムではないので編集処理を強制終了
}
break;
case TVN_ENDLABELEDIT:
// 編集の結果を反映する //
TreeView_SetItem(hTreeView, &ptv_disp->item);
break;
}
}
break;
426 :
デフォルトの名無しさん :05/02/02 10:20:40
タスクマネージャとかで終了させようとしたときに、 操作が拒否されましたと出るようにするにはどうすればいいですか? 勝手に外部から終了されないようにしたいのですが。
まぁ、ウィルスでないにしても拒否しないべきだな。 完全にバグの無いプログラムを書ける自身があれば別だが
429 :
デフォルトの名無しさん :05/02/02 11:00:53
430 :
仕様書無しさん :05/02/02 11:18:33
普段は待機していてメモ帳(notepad.exe)が起動したことを 検出するにはどうしたらいいんでしょうか? ・1分ごと(1000ms*60)ごとにチェック ・特定のプロセス名が起動していたら・・・ というところがわかりません。 簡単でしたらwinmain()からお願いします。 AfxMessageBox()程度なのでウインドウを作ったりする必要はありません。 難しかったらMFCでもOKです。
431 :
デフォルトの名無しさん :05/02/02 11:27:59
>>430 >難しかったらMFCでもOKです。
この一文でキサマがどれだけプログラムできないかが
よく分かった。
>>430 部品だけ教えてやる
SetTimer
KillTimer
CreateToolHelp32Snapshot
Process32First
Process32Next
CloseHandle
433 :
デフォルトの名無しさん :05/02/02 11:38:17
ヘルプで、PSAPIを調べろ。 Enumerating All Processes という項目 (Windows開発 > Windows Development > Windows Base Services > Performance Monitoring > SDK Documentation > Process Status Helper > Using PSAPI) に、ソースコードがそのまんま載ってる。実際にコンパイルして確認した。
>>430 if (AfxProccessFind("notepad.exe"))
//見つかった
else
//見つからない
>>433 PSAPIはWin9x系未サポートな罠
436 :
デフォルトの名無しさん :05/02/02 12:30:33
>>435 今更Win9x系をサポートする必要あるのかねえ。
やっぱあるかねぇ。
特殊な場合を除いて9x系は無視して良いと言っても過言ではない。 最近はUnicodeビルドばっかりやってる。
>>411 既出だけど、gdiplus.dllは再配布可能。
でも初期の版はセキュリティ問題あるので、新しい奴じゃないとダメ。
libpngもセキュリティ関連で似たような経緯あるし、OleLoadPictureに
頼っておいて Windows Update でカタ付けてもらうのが良いような・・
>>436 95はともかく98-Meは現役で使われてるのがかなりある。
特にMeあたりだとPentium3搭載とかでハードウェア的には全く問題ないわけだし
うちはもう今年から対応止めた。2K以上は楽だよ
>>426 「タスクバーにアイコン表示しないようにする」くらいにして
起動してるのを目立たなくしておく、くらいにしといたら?
たしかデバッガ噛ませると… 結構危険なのでお勧めしないけどね
うちは9xまだまだ現役。 Unicodeビルドでもlibunicows + unicows.dll使ってるし。 最近unicows.dllの代わりにOpencowsなんてものも出てきたからちょっと期待。
>>424 レスthx.
プロトコルアナライザは高くて手が出ないので、ソフトウェア的に行きたかったのです。
今回の場合、USB Monitor というプログラムで目的が実現しそうです。
どうもでした。
まちがえた。OpencowsじゃなくてOpencow。
Wininet APIのInternetSetStatusCallbackでHTTPからのダウンロード状況を知る方法はないでしょうか? FTPならINTERNET_STATUS_RESPONSE_RECEIVEDにダウンロードサイズが付いてくるようなんですがHTTPの場合来ないようなので‥‥
447 :
デフォルトの名無しさん :05/02/02 16:54:00
NTFSの機能である「ファイルの概要」はどのように 読み書きすればよいのでしょうか。 タイトル、表題、作成者、カテゴリ、キーワード、コメント 等をファイルマネージャで弄りたいのです。
450 :
デフォルトの名無しさん :05/02/02 17:18:22
長い時間が必要な処理をする場合どういう方法が適しているのでしょうか? 思いついたのは、長時間の処理をする為のスレッドを作成するか、 処理の途中で状態を変数に残しておきリターンして タイマー呼出しで処理を継続する(関数のポインタによる呼出し) という方法の二つです。 スレッドは使いたくないので後者にするとして、 処理を中断するタイミングや次に処理するタイマーの設定が問題になります。 10ミリ秒処理をすれば一度中断して1秒後に再開とか。 システムに過度の負荷を与えない範囲で、できる限り高効率で実行したいと なるとどういう数値を指定すればいいのかもわかりません。 処理も結構複雑になりそうですし、他にいいやり方があればと思っています。
>>450 スレッド使え。何が嫌なんだ?
それと負荷軽減にはSleep(0);
>>451 InernetReadFileに渡すバッファサイズが大きすぎて(== ファイルサイズ)来てなかったみたいです。
thx
455 :
450 :05/02/02 18:13:30
>>452 WSAAsyncSelect を用いたネットワークプログラム(GUI)です。
Winsock は一つのソケットを複数のスレッドで共有出来ないはずなので、
スレッドを利用するとなるとそのソケットの専用スレッドが必要ですよね?
PostThreadMessage を利用すればソケットから読んだデータに応じて
GUI に処理を渡すのは楽なんですが、別の何らかの方法で逆も実装しなければ
いけないのと、ソケットスレッドがその長時間の処理を行ってる最中に、
どうやって読み込み処理をするかが問題になってきます。
スレッドを使わない方法の方は、Sleep(0) で負荷の軽減は出来ましたけど、
長時間の処理をやりながら、なおかつ本来のメッセージ処理も滞りなく
する方法が必要になります。
Task,または、プロセス、それを細かくしたスレッド、使えよ、 ごるぁ
wParamとかlParamってなんなんでしょうか?
>>455 > GUI に処理を渡すのは楽なんですが、別の何らかの方法で逆も実装しなければ
その逆の流れもPostThreadMessage使えよ。
461 :
450 :05/02/02 19:19:02
>>その逆の流れもPostThreadMessage使えよ。
スレッド用に不可視のウィンドウですか?
残りの問題は、長時間処理をしている最中に
どうやって読み込んで処理を出来るかなんですが、
>>450 に書いた処理を中断・継続する方法を使えば同様に実装できるとは
思いますが、実装がややこしいのはほとんど変わりません。
特に不可視のウィンドウを使ってメッセージで処理するなら、
スレッドを使わない場合と同じような実装になると考えられます。
>>455 では読みづらかったかもしれませんが、長時間の処理をしている
最中でも、ソケットから来るデータを別途処理しなければなりません。
この場合、スレッドを使うメリットは何かありますか?
>>461 漏れならこういう設計にする
・UIスレッド
- 通信用スレッドからのイベントに反応
- 通信用スレッドへデータ供給 (Queueや共有するメモリなどで)
・通信用スレッド
- 送るべきデータがあればsend
- 読めるデータがあればrecv。
アプリケーション的に意味あるカタマリになったらUIスレッドへ通知
・ワーカスレッド
- UIスレッドから指示を受けて動く。
- なにか時間のかかる処理があるならここで。
スレッド間のメッセージのやり取り・同期。待ち合わせはイベント等を使う。
おしまい。
UIスレッドがデータ供給するのはアフォ設計だな。 ロック中描画が止まる。
>>463 一般に言ってユーザとのインタラクトの他にどこからデータが発生する?
Queueに貯めとけばいいだけじゃん。
フックについてわかりやすく説明しているところを教えてください。
ちがう、スレッドベースだろう?、
>>466 何を言っているのかさっぱりわからないので詳しくお願いします。
例えばメーラのUIスレッドで「ログイン」ボタンの押下イベントを受けたら、
・UIスレッドはアカウント名とパスワードを特定のメモリに保存して、
「ログインしろ」と通信用スレッドへ通知 (queueでコマンドを送る/
stateを変更した後イベントをセットする等)
・通信用スレッドはログイン処理開始。
成功したり失敗したらUI側へ通知
みたいな流れになると思うんだけど・・・
一番ユーザーとして嫌いなのが、やった処理が直ぐに取リ消し出来ないこと 分かる?
469 :
デフォルトの名無しさん :05/02/02 20:18:40
ユーザーにテキストボックスを選択させて、sendkeyで文字列を送る と言う事をしたいのですが、どうしたら良いのかさっぱりわかりません。 とりあえずSpy++のTARGETアイコン(?)のような機能を呼び出す方法を探しているんですが、それが上手くみつからず、、 わかる方がいらっしゃいましたら教えて頂ければ幸いです。
>>463 例えば
>>467 の例だと、非UIスレッドが「アカウント名」とか「パスワード」を
どっからか手に入れて供給するのが正しいわけですね。
面倒なので合意しときます。
>>466 >>468 何を言っているのかさっぱりわからないので具体的に詳しくお願いします。
っていうか割と由緒正しいこんなスレでも妄想キチ相手にしてる漏れって・・・
通信をステートマシンで実装するのは当たり前だし、
ちゃんと作れば当たり前に中断だってできるだろう・・・
(プロトコルが許す範囲において)
Queueには確実にmutex(Winとかいうローカル環境限定で言えばCriticalSection)が必要だけど、 そこが混み合ったらどうすんの?しばらくメインスレッドが応答不能になりそうだよ。
まあ普通は分離するわな
しをしを、もうだめぽ
474 :
450 :05/02/02 20:49:32
>>462 長時間占有してなおかつ送受信が必要な処理を想定してたのですが、
それを純粋に分離しちゃった方がいいわけですね。
同期・通信(キューとか)機構をどうするかは考えなくてはいけないけど、
今まで考えてたやり方よりはまだ簡単そうです。
475 :
デフォルトの名無しさん :05/02/02 22:56:24
>>246 もう答え要らんみたいだけど、実行するユーザを工夫するか。
ちょっと違うけど複数プロセスで構成してお互いに監視して再起動でも要件満たす?
ぐらいしか思いつかんかったがどうだろう。
476 :
デフォルトの名無しさん :05/02/03 01:19:48
他のアプリケーションのツールバーを拡張する事って出来るんでしょうか? 具体的にやりたい事は、Beckyのプラグインをつくってるのですが、 そこで、ツールバーにアイコンをひとつ加えたいのです。
やれない事はない。
joySetCaptureってjoyGetPosと同じで4つボタンまでしか対応してないんですか? 何か、メッセージ調べてると、どうも0x2を押したときに0x202が送られてきてるみたいなんですが… こういう場合は、DirectInputを使うかjoyGetPosExを使うしか無いですか?
>>477 具体的にどうやればいいのでしょうか?
なにか、API名などのヒントだけでも頂ければあとは自分で調べます。
GetEnumWindow AddMenu
483 :
デフォルトの名無しさん :05/02/03 10:30:32
誘導されてきました。 C++ ではなくて C で Windows95 以降用のプログラムを作りたいの ですが、どの開発環境を使えば出来るのかよくわかりません。 ランタイムライブラリのファイルを 1,2 個入れる程度なら妥協は 出来ますが、.NET Freamwork をインストールするなんて方法は取 りたくありません。 何か方法がありますか? 今思い出したのですが、Quick C for Windows 持っています。 それでいいかも。 代案があればお願いします。
Cygwin/MinGW
lcc-win32 C++に対応してないC専用開発環境。マジオススメ。
>>480 フックしてツールバーにボタン追加。コマンド待つ。
寿命が長くなれば危険も増すからお勧めしないけど。
検索のダイアログとかapiで出せるけど 検索アルゴリズムは自作するしかないの?
お前が「何の中から」検索したいかはシステムは知らないからね。
>>488 何を検索したいのか知らんが、とりあえず "Indexing Service"でも使えば?
491 :
デフォルトの名無しさん :05/02/03 16:50:30
ウィンドウスタイル(ウィンドウ拡張スタイル)で、縁無しのウィンドウ(周りに何も境界線とかの表示がない。)を作りたいのですが、 何を指定すればいいのでしょうか? 数時間かけて調べてみましたが、よくわかりません。 すいません。
ws &= ~WS_THICKFRAME;
^ WS_THICKFRAME ?
orz
>>461 別にウィンドウなんてなくてもメッセージはやり取りできるし、
そのためにPostThreadMessageはあるんだが……。
文字列の検索
WS_BORDERも含めて完全になにも枠がないウィンドウつくりたいならWS_POPUPのほうが手っ取り早いと思うが。
任意のアドレスにある命令が実行されたというのを調べるのはどうすればいいのでしょうか? いわゆるVC++でデバックする時に使うブレークポイントを自分でAPIを使って実現したいのですが。 またその時のレジスタ値を取得するようなAPIはあるのでしょうか?
WS_POPUPだけにしたら何も出てこなくなったんですけど・・・ タスクバーにはアイコンがあります・・・
ws &= ~WS_THICKFRAME;
WS_EX_CLIENTEDGEつけてないか?
>>496 Win32APIじゃないけど文字列検索ならとりあえずstd::string::findとかstd::strstrとか
VCならリソースエディタでダイアログ弄って試したら。
DWORD dwStyle; DWORD dwExStyle; lpszClassName = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW, hCursor); dwExStyle = WS_EX_TOPMOST; dwStyle &= ~WS_THICKFRAME; return CreateEx( dwExStyle, lpszClassName, _T("タイトルバー"), dwStyle, rect, NULL, NULL, NULL); だと、縁有りになりますね。
>>504 それって2バイト文字考慮されてなかった希ガス
>>507 dwExStyleを初期化せずにdwStyle &= ~WS_THICKFRAME;ですかぁ?
いえ、dwExStyle=0として試しましたが、駄目でしたよ。
>>509 さん、
それ参照したいと思います。
皆さん、本当にご迷惑おかけして吸いません。
#define WS_OVERLAPPED 0x00000000L というのはわりと嵌りやすい罠だな。
>>507 ウィンドウ作られあとに(WM_CREATEとかの処理の中で)
GetWindowStyle
ws &= ~WS_THICKFRAME
SetWindowStyle
じゃだめ?
>>512 #define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | \
WS_CAPTION | \
WS_SYSMENU | \
WS_THICKFRAME | \
WS_MINIMIZEBOX | \
WS_MAXIMIZEBOX)
ですが何か?
BOOL CXSFrameWnd::CreateTest(CWnd* pWnd)
{
LPCTSTR lpszClassName;
CRect rect( 0, 0, 300, 200);
HCURSOR hCursor = ::LoadCursor( NULL, IDC_ARROW);
DWORD dwStyle=0;
DWORD dwExStyle;
lpszClassName = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW, hCursor);
dwExStyle = 0;
dwStyle = WS_POPUP | WS_SYSMENU;
dwStyle &= ~WS_THICKFRAME;
return CreateEx( dwExStyle, lpszClassName, _T("タイトルバー"), dwStyle, rect, NULL, NULL, NULL);
}
やはり、こうなります。(2ドットの縁有り)
http://www.geocities.jp/ayana_city/windowstyle.jpg orz
leftとtopに、2ドットのラインがあるんですよね。 その2ドットは多少の色違いがあるから、窪みがあるように見える。 rightとbottomは一ドットなんですけども。 left top right bottomの四方全て、一ドットの枠にしたいんですが。
dwStyle = WS_POPUP | WS_SYSMENU; dwStyle &= ~WS_THICKFRAME; アフォ?
MFCの話だとスレ違いじゃねぇかと思うが。 CXSFrameWndがCFrameWnd派生だとすると、段差がついてるのはCXSFrameWndに貼り付けられた子ウィンドウのほうなんじゃねぇか?
dwStyle=WS_OVERLAPPED で枠も何も無いけどな。
521 :
デフォルトの名無しさん :05/02/03 18:23:05
やっぱりMFCを使っているとつまらないことで苦労しないとならないのですね。
たぶん派生元のクラスでCreateされるときに勝手にスタイルが変わる。 ウィンドウが作られたあとにスタイル変更する方が無難。
32ビット環境でソース互換性の為と思い SetWindowLongPtrを使用しているのですがコンパイル時に warning C4244: '引数' : 'LONG_PTR' から 'LONG' に変換しました。データが失われているかもしれません。 となります。 これは私が何か問題のある行動、または足りない設定があるのでしょうか? それとも単にSDKヘッダの定義ミスで特に問題のない事なのでしょうか? また、回避策はあるのでしょうか? できればSetWindowLongPtrの為だけに C4244を#pragmaでオフにすることは避けたいのですが・・・
>>523 SetWindowLongPtrの戻り値をLONG/long型の変数に代入しているならLONG_PTRにしろ。
527 :
デフォルトの名無しさん :05/02/03 18:44:29
LONG_PTRって、ポインタのような名前のくせに 実際にはlongか__int64ってのはなんでだろ。
>>525 SetWindowLongPtrの定義が
LONG_PTR SetWindowLongPtr( HWND hWnd, int nIndex, LONG_PTR dwNewLong );
のようになっているはずでにもかかわらず
INT WINAPI _tWinMain(省略)
{
LONG_PTR dwNew = 100; // 数値は適当
SetWindowLongPtr(NULL, 0, dwNew); // 内容は適当
}
のようなコードで上記警告になってしまいます。
>>519 さん
そのサイトにかかれてある通りに試したら、
縁が無くなりました!
本当にありがとうございました。
>>528 警告はLONG_PTR dwNew = 100; で出てるんじゃね?
warning C4244: '引数' : 'LONG_PTR' から 'LONG' に変換しました。データが失われているかもしれません。
INT WINAPI _tWinMain(省略) { LONG dwNew = 100; // 数値は適当 SetWindowLongPtr(NULL, 0, &dwNew); // 内容は適当 }
http://www.kumei.ne.jp/c_lang/sdk/sdk_00.htmのコードをビルドしたいのですが 、
c:\source1.cpp(20) : error C2440: '=' : 'HGDIOBJ' から 'HBRUSH' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
c:\source1.cpp(43) : warning C4244: 'return' : 'WPARAM' から 'int' に変換しました。データが失われているかもしれません。
というエラーと警告が出ます。
なぜだか分からないのですが分かる方教えてくれませんか?
MC++2003を使ってます。
>>534 あ、そんなところに・・・・
これはどのように治せばいいのでしょうか?
myProg.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
>>537 あ、出来ました
どうもありがとうございました^^
猫以下だな…
>>532 それだとSetWindoLongPtrを使う意味がまるでなくなってしまうような orz
MSのヘッダにミスがあるということで良い気がしてきました(´・ω・`)
DLLから.libを作成する方法ってありませんか? あるDLLを静的リンクしたいのですが、DLLだけしかありません。 関数の型はわかってます。
542 :
デフォルトの名無しさん :05/02/03 22:13:27
なんかライセンス違反の匂いが
キーボードフォーカスを任意の座標に移動させるにはどうしたらいいか教えてください
>>541 DEFを書けば、LIB.EXEから作成できる。
キーボードフォーカス
>>544 WindowFromPoint()でウィンドウハンドル取って
SetFocus()だとどうだろう
座標ってことは、 エディットボックスの斜め上あたりにカーソルを存在させる とか? かなり無理があると思うが・・・・
解像度と同じサイズのウィンドウを作ってしまえば出来るぜ。
OPENFILENAME で 開き ダイアログが閉じる前に選択されたファイルのチェックを行い メッセージボックスを表示したいのですが、 どのようにすればよいでしょうか。 CDN_FILEOK だとダメみたいです。。。
>>551 CDN_FILEOKを受け取った後、FALSEを返してるか?
はいFALSEを返していますが、閉じてしまいます。。
開くボタンを消して、それと同じ位置にカスタムボタンを貼り付けるとか…。
おまえらエスパーか? あの文で何がしたいか分かるのか?
エスパーて・・・まだ昭和の人ですかあなたは・・・
語学力の無い香具師だな。 ・ダイアログが閉じる前に (=ダイアログを閉じないで) ・CDN_FILEOK だとダメみたいです。。。 (=CDN_FILEOKをフックして色々したけど駄目だった) この程度を文中から読み取れないで、 よくMSDNとか理解できるな。
558 :
デフォルトの名無しさん :05/02/04 11:24:30
APIとは直接関係ないですが、質問させてください。 どのラジオボタンが押されているのかを取得したいのですが、 IDが、IDC_RADIO1 , IDC_RADIO2 , ・・・・・ と並んでいるとして SendMessage(GetDlgItem(hDlgWnd, IDC_RADIOx ),BM_GETCHECK, 0, 0) をforループで回して、 チェックされているラジオボタンを検出したら nCheckItem = i としたらいいのではないか?と思ってます。 ところが、#defineで定義されている最後の数字をFORループの変数に従って 変えるやり方がわかりません。どうしたらいいでしょう?
具体的にどう書いてダメだったか書いてないな。 CDN_FILEOKの応答を正しく書いてないかもしれない。
>>558 int id[] = {IDC_RADIO1,IDC_RADIO2, ・・・・・};
562 :
558 :05/02/04 12:31:37
>>561 とりあえず解決できました。 ありがとう!!
>>528 実はこうなっている。
#ifdef _WIN64
(略)
#else
#define SetWindowLongPtrA SetWindowLongA
#define SetWindowLongPtrW SetWindowLongW
#endif
Windows 95から使えるのはこういうわけ
>>527 「ポインタと同じサイズ」と言いたいのだろう。
(・A・)
MFCでダイアログベースのアプリケーションを作成したのですが、 どうやってもダイアログにアイコンを表示できません。 初期のコードにSetIconなどのアイコンを表示するようなコードが書かれているのですが、 なぜ表示されないのでしょうか?
すいません、解決しました
568 :
デフォルトの名無しさん :05/02/04 13:39:33
>>567 解決したなら、それはそれで「なぜ表示できていなくて
どうやって解決したか」を語るべきだ。
そもそもMFCはAPIじゃないだろ
初歩的な質問になりますが、 現在のマウスの位置を取得するには、どのようにすればいいのでしょうか?
あと、もう一点。 マウスのLボタンがクリックされているかどうかを調べるWin32関数はありますか?
CDからWAVを吸い出すツールを作りたいと思ってるんだが・・・。 CDから指定トラックのデータを吸い出すAPIとかってあるの? 知ってる人にはフザけた質問かもしれんが、ちょっとマジで聞いてます。 だれかマジレスお願いします。
>>573 ありがとうございました。
助かります。
ダイアログのプロパティにSystem Menuという項目があったので それをTrueにしたらアイコンが表示されました これをTrueにしないとアイコンや最大化、最小化が表示されないっていうのを知りませんでした
CDRip.DLLでも使ってみたらいいんじゃねーの
ローカル座標とグローバル座標を変換するためには? どうしたらよいのでしょうか?
ClientToScreen ScreenToClient
ほんと知ってればどうってことない質問ばっかりだよな。 逆引きAPIのすごく細かいサイトとか本あればいいのにねぇ。 金になるならやるんだが。
SetTimerみたいな関数を自作したい場合って、スレッド使うの? スレッド→メッセージループ→時間が来たらメッセージ送信 って感じですか? それとも、別の良い方法がある?
W2K以上ならスマートな方法あるな。
いやあるなっていうかそこで書き込みおわりかよ(笑
いや、サポートすべきOSのバージョンわかんない。 Me以下もサポートしなけりゃならないなら余計な事になるから。
>>583 私へのレスですよね
出来れば1xもサポートできる方が良いですが、自分も回りもXPか2000だけなんで、無サポートでも良いです
どんな方法か教えてください。
>>584 1xって…9xなのか?
それとも…ガクガク
>>585 スレタイをちゃんと見てる香具師ならそれはないだろう
Win1.0かぁ、懐かしい、タイルウインドウしか出来なかった。
588 :
デフォルトの名無しさん :05/02/04 20:02:32
>>587 俺も使った
( ゚д゚)ペッ が感想
>>588 まー、あのころはStarに感動してポケットマネーでGUIを感動した時代だ。
仕方が無い
286/10MHz〜386/16MHzあたりの時代だからねぇ。。。 まあ、68000の8MHzであれだけのことをやってたMacはたいしたもんだった。 爆弾でまくりだったけど。
スレッドでタイマ作るならWaitFor〜使うのが普通だろ。
>>592 だったらMe以下でもできるじゃん。
たぶん
>>581 は俺たちの知らない様なこと知ってる。
期待。
Lisa使ったことある?超高級Macだった
595 :
デフォルトの名無しさん :05/02/04 20:59:03
キーを押した時の、WM_KEYDOWNに付いての質問です。 連続で押していると、100ミリ秒ぐらいの間隔でWM_KEYDOWNが来ますが、 PostMessageでやると、その間がありません。 どうやれば、ホントにキーを押した感じのような表現が出来るでしょうか。
少し、演出とか考えろよ。リアルタイムでプログラムが反応する とか思ってるのはあほすぎ。逆に、システムがユーザーをごまかす を考えろw、ユーザーが不利にならない範囲でだがw
SendMessage(...); Sleep(100); SendMessage(...); でだめか?
>>596 すいません。
>>598 そういうのも考えていました。私のはSetTimerの方でしたが。
WM_KEYTOUCH、WM_KEYPUSHとかあればいいんですけど。
>>601 実装はスレッドだが、CreateTimerQueue,付近を調べれば?
知ってんじゃないの?SDKの同期/非同期サービスだが、知っていたらごめん。
いやー、あんた知ってるよね
GlobalAlloc関数について質問があるのですが GlobalAllocの第2引数の 割り当てるサイズ なのですが わかりにくいと思うのですが char *lpszBuf; int nLen; HGLOBAL hMen; nLen = GetWindowTextLength(hEdit);←hEditのサイズが入る hMem = GlobalAlloc(GHND, sizeof(char) * nLen + 1); lpszBuf = (char *)GlobalLock(hMen); こんな感じになると思うのですが sizeof(char) * nLen + 1のところが良くわからないのですが sizeof(char) × (nLen + 1)ってことなのでしょうか? その時のnLen+1は理解できるのですが sizeof(char)もサイズを求める物ですよね? こいつはいったい何のためにいるのでしょうか?
やりたいことは あるソフトに、メッセージ(とりあえず、マウス左ボタンダウン)を投げたいのです ですが、その対象となるソフトが、グローバルフックでメッセージを受けて処理している場合、 そのソフトに対し、メッセージを投げるにはどうしたらいいのでしょうか? わかるかたいらしたらお願いいたします
>>603 sizeof(char) * nLen + 1は(sizeof(char) * nLen )+ 1と等しい
GetWindowTextLength(hEdit)はhEditに格納されている文字列の文字数が返り値になる
つまり一文字のバイト数*文字数+1てわけ
つうかコレ書いた奴間抜けだな
>>603 本来はsizeof(LPTSTR) * nLen + 1じゃないか?それ。
この場合はUNICODEが定義されてるかどうかでLPTSTRのサイズが変わる。
>>605 分かりました!
勘違いで迷路に迷ってたみたいです
nLenが既にもう完全なhEditのサイズかと思ってました
本当に間抜けな質問申し訳ありません
曇ってたのがすっきり晴れました
マジでありがとう
sizeof(TCHAR) * (nLen + 1)
申し訳ないもう1個出てきました nLen = GetWindowTextLength(hEdit);←hEditの文字数が入る のときのnLenが文字数なので sizeof(char)*nLen+1は理解できたのですが dwSize = GetFile(hFile , NULL);←dwSizeにサイズが入る このとき dwSizeは完全なサイズが入っているので 第2引数は dwSize+1 だけでいいと思うのですが 何故かsizeof(char)*dwSize+1となっているのですが charが8バイトでdwSize+1が17バイトだとしたら メモリーの無駄遣いしまくってしまってないでしょうか?
>>609 あんた、釣りがへた、
典型的なハード知らないソフトウエアエンジニアー
>>611 エンジニアなどたいした肩書きは無いですよ
独学で猫でもわかるを読んで勉強してるので
知り合いにCなどが出来る方がいないもので変な理解をすると
変更が効かずどんどん沼にはまっていってしまって・・・・
>>609 > dwSize = GetFile(hFile , NULL);←dwSizeにサイズが入る
> このとき dwSizeは完全なサイズが入っているので
> 第2引数は dwSize+1 だけでいいと思うのですが
> 何故かsizeof(char)*dwSize+1となっているのですが
> charが8バイトでdwSize+1が17バイトだとしたら
> メモリーの無駄遣いしまくってしまってないでしょうか?
…どこを指しているのかワカラン
>>613 申し訳ないですわかりにくかったです
HANDLE hFile;← CreatFileで既に作ってる
char *lpszBuf;
DWORD dwSize;
HGLOBAL hMen;
dwSize = GetFileSize(hFile, NULL);←hFileのサイズが入る
hMem = GlobalAlloc(GHND, sizeof(char) * dwSiza + 1);
lpszBuf = (char *)GlobalLock(hMen);
dwSize = GetFile(hFile , NULL);←dwSizeにサイズが入る
このとき dwSizeは完全なサイズが入っているので
第2引数は dwSize+1 だけでいいと思うのですが
何故かsizeof(char)*dwSize+1となっているのですが
charが8バイトでdwSize+1が17バイトだとしたら
メモリーの無駄遣いしまくってしまってないでしょうか?
まだわかりにくいと思うのですが宜しくおねがいします
sizeof(char) は8じゃないよ
sizeof(char)は1と決まっているので問題ない。意味もない。
8ビットでした・・・・・ 8ビットは1バイトですね 本当にはずかしい テンパってテンパって・・・ くだらない質問に答えていただいてありがとうございます。 くだらなかったのにマジで悩んでました
さてここでお約束の「1byteが8bitとは限らない」をお送りしません。
将来考えれば、32バイト境界やればハードとソフトが一致する
チーズビットって今でも売ってる?
厨臥区政が混ざってるな
string.hのstrstrやstrchrと同じようなことをするWinAPI関数はありますか? strlen=lstrlen、strcpy=lstrcpy、sprintf=wsprintfがあるぐらいだからそれもありそうなんだが。
shlwapi.h の中にありますよ。
HYU- とかいうやつは、しゃらぽあ、あいこ、いらない、五月蠅い
>>618 asciiはそうだ、8ビットこーどは西洋にはない
>8ビットこーどは西洋にはない >8ビットこーどは西洋にはない >8ビットこーどは西洋にはない
1オクテット
ASCIIは7bit
>>603 GlobalAllocなんて忘れろ。
クリップボードを扱うときしか使わない。
>>632 16Bit時代の遺物
HeapAlloc使え
635 :
デフォルトの名無しさん :05/02/05 07:28:29
>クリップボードを扱うときしか使わない。 使うじゃん。 おまえもしかして、malloc で済む用事に わざわざ VirtualAlloc だの CreateFileMapping だの使う手合いか?
637 :
デフォルトの名無しさん :05/02/05 08:00:33
Globalはあまり使わないなぁ… 大抵自プロセス内だけのデータならLocalAllocで済ますんだが
639 :
デフォルトの名無しさん :05/02/05 08:51:13
そういうのを裸で使う理由があればそうするだろうけど 固有の機能を必要としない場面でむやみに使うと 移植性おとすだけだろ
>>638 Win32 APIでは、 ローカル ヒープとグローバル ヒープに違いはありません。
バカじゃねーの?
>>635 malloc で済む用事にCreateFileMapping
具体的にmalloc で済む用事にCreateFileMappingが使える例を教えて下さい。
HeapAlloc使え
643 :
デフォルトの名無しさん :05/02/05 09:17:39
>>641 ファイルマッピングの使い方が知りたいなら MSDN でも嫁
ここでイチから教えてやるほどヒマじゃねえ
時間単価1万くらい出すなら別だが
>>643 使い方は知ってますがmallocの代わりなんかに使える例を教えて下さい。
はっきりいってmallocが一番効率がいい。 HeapAllocを何も考えずに直接使うのはただのバカ。
>>643 確保したいサイズを指定してCreateFileMappingを呼び、
MapViewOfFileすればいいだけだろ?
mallocが使える全ての場所で、その代わりにできるが?
もちろん、mallocが使えるならmallocを使うに越したことは無い。
VirtualAlloc ----柵---- malloc > HeapAlloc(GetProcessHeap()) >>>>(越えられない壁)>>>> Global/LocalAlloc ----別世界---- CreateHeap, IMalloc, Global/Localメモリハンドルが必要なとき ----別次元---- CreateFileMapping
649 :
デフォルトの名無しさん :05/02/05 09:58:04
お前らレベル低すぎ。 バグばっかり作ってるんだろうな。
>>649 はいはい。君の作ったコードも先輩がこっそり
直してくれてるんだろうね。
alloca -----神の壁----- malloc, new ----一般人の壁------ HeapAlloc ----バカの壁-------- LocalAlloc, GlobalAlloc
てかvector使えば自分で動的確保する必要なんてほぼ無いだろ。 動的バッファもvector<char>でいいし。
質問 「あるウィンドウ」を表示させるとき、今のアクティブなウィンドウをディアクティブにしないで、 アクティブのままにしつつ、「あるウィンドウ」を表示させたい場合どうすればいいのでしょうか?
あるウィンドウを表示させた後に今のウィンドウをアクティブにし直せばいいじゃん。
ShowWindowにSW_SHOWNAてのがあるな
>>654 もうちょっと質問者の意図を汲んでやれよ。
657 :
デフォルトの名無しさん :05/02/05 13:15:15
今さあ、 WaitCommEvent(); つかってさあ、 スレッドでシリアルの受信バッファのイベント待って、 受信バッファのデータをchar変数にバッファさせようとしてるのよ。 ところが、一回受信してEV_RXCHARのイベントが上がったら、 上がりっぱなしで、charにたまりつづけてるんだけど、 どうすりゃいいのよ? つうかさ、いまさら232Cかよ。
>>657 Cisco製品を普段使ってるんですが、
その際、TeraTermを使用してるんです。
で、自作のターミナルを作ろうと思ってるんですが、
その際、資料として参考になるサイトってご存知得ないですか?
できれば、教えていただきたいのですが。
よろしくお願いします。
クスコ
IMEの漢字変換ポップアップウィンドウを、こちら側で表示させたい場合、どのAPIを呼び出せばいい? 例えば、「あいさつ」という文字列を変換させたいとして、 そのAPIに「あいさつ」という文字列を引数として渡すことで、漢字変換対象のリストを表示させるみたいな。
>>657 >>658 5年くらい前まだ、プログラム始めたての頃のソースあった。
はじめたての頃のなので正しく出来てるかわからんしどうなってるのか忘れてるので怪しい情報になるが参考までに。
こんな流れでやってた。
CreateFile : ポートオープン:GENERIC_READ | GENERIC_WRITEでオーバーラップ使ってたのでFILE_FLAG_OVERLAPPEDあり。
SetCommMask : EV_RXCHARとか使用したいイベントのマスク設定
SetupComm : 通信バッファ設定
PurgeComm : PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEARとかでクリアして初期化しているらすぃ
SetCommTimeouts : タイムアウト時間設定
SetCommState : フロー制御とかの設定
別スレッドWaitCommEventでWaitして制御かえったら
if((dwEvtMask & EV_RXCHAR))とかでイベント確認して処理してまたWaitループ
緊急停止はEscapeCommFunctionでイベント立ててWaitぬけてクリア処理
書いてるうちになんとなく思い出してきたが、
上で書いた関数での設定色々あるけど一つ一つがすごく重要な設定だった気がする。
結構めんどくさかったような。
RS232Cのフロー制御の知識とか本が無いと意味不明だったきがする。
>>661 さん
助かります。
それを参考にいろいろググりつつ、自作ターミナルを作ってみようと思います。
>>657 無手順?
複数のスレッドで交代で切れ目なく受信バッファを読むとかダメ?
>>662 SimpleTerm とかいうサンプルが MSDN にあったのではないか。
オレはこれを元に作った ComNifty まがいで nifty のパソコン通信していた。
なんとか7という口へ 56Kモデム経由だったと思う。
TeraTermもソース公開なんだよなあ…
人のソースを読もうとする気がしないのは言うまでも無いだろw
どうせ弄るのなら、TeraTermよりPUTYYの方が良いだろう。 TeraTermの拡張インタフェースは、かなり捻じれている。 それを思えば、単体で動くPUTTYのソースを直接弄って 独自PUTTYに改変するのいい。
668 :
657 :05/02/05 23:48:20
>>663 イベントが上がりっぱなしなのがなんでなのかが
わかってないのよ、私。
受信バッファ読んだらイベント下がると思ってたんだけどな・・・
勝手な思い込みに近いけど。
ウィンドウを常にアクティブにする方法ってありますか?
Zオーダーが一番上とかならあるけどな
>>668 受信バッファ小さすぎるとか
ReadFile()が追いついてないとか
フックして、他のプロセスへのWM_ACTIVATEAPPを潰してはどうでしょう?
>>668 FILE_FLAG_OVERLAPPED を指定した場合は IOがペンディングになってるかどうかをチェックしないと。
ファイル名の変更はどうすれば良いのでしょうか? Win32APIで出来ますか?
できます。
>>674 MoveFile()
rename()
677 :
デフォルトの名無しさん :05/02/06 13:56:31
すみません。waveOutWrite()で聞きたいことあるんですが、 まずwaveOutWrite()でヘッダ送る(音データが格納されているバッファのアドレスも送られる)。 その後に音データバッファのデータを変更してもOKなんですか? もちろん再生位置付近のところとかは、いじらないようにします。
聞く前にやってみろ
>>678 いや、やってみて普通にできたから聞いてみたんだが…
共有違反とかしてそうだから不安で聞いてみた。
LoadImageで画像表示してます。 画像Aを背景にして、画像Bを上に表示したいのですが、画像Bの要らない部分を透明に出来ますか? 分かる方お願いします。
MaskBlt
682 :
デフォルトの名無しさん :05/02/06 22:09:37
半角カナを全角カナへ変換するAPIはありませんでしょうか?
CreateFile関数なんですが C:\txt\a.txt だと読めないのに C:\\txt\\a.txtだと読めるのはなぜですか? _getcwdでデレクトリー調べているので C:\txt としかゲット出来ないですけど どうしたら良いんでしょうか?
文字のエスケープ
付け足す文字を \\a,txtにしたら出来ました どうも^^
ファイル名まで変えてどうすんだよ
エディットボックスのウインドウメッセージのWM_KEYDOWNで Enterキーが押されたときに処理させたいのですが、 押すとビープ音が鳴ってしまいます。 これを鳴らさないようにするには、どうすればいいのですか? ちなみにCreateのときにES_AUTOVSCROLLとES_MULTILINEを設定すると 鳴らなくなるんですが、処理後に改行してしまいます。
>>689 エディットボックスをサブクラス化してやっているって事でいいのかな?
だとしたらWM_KEYDOWNで処理した場合はCallWindowProcに渡さなければいいんでないか?
状況が良くわからないので答えようがないけど
>>691 処理後return 0で返したけどだめ。
また、キーコードが入ってるwpを0にしてもだめでした
>>685 C言語の超超基本的な事でWindowsAPI全然関係ないぞ・・・
test1.obj : error LNK2019: 未解決の外部シンボル "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) が関数 _WinMain@16 で参照されました。 Debug/test1.exe : fatal error LNK1120: 外部参照 1 が未解決です。 と出るのですがどういう事なのでしょうか?
>>694 関数WndProcが無いとおっしゃってます
ソースくらい貼りつけろ
>>695 ありがとうございます^^
書き方をミスってましたw
もう一つ質問があるのですが、画像表示を速くすると、画像がちらついてしまいます。
どうすればいいのでしょうか?
>>698 背景を消去しないようにする
(WM_ERASEBKGNDをDefWindowProcに渡さない)
スタートアップに登録されたアプリケーションが、 OSの起動時だけ、実行したいプログラムがあるとして、 OSの起動時か?そうでないかを知るには どうしたら良いのでしょうか? 宜しくお願いします。
>>689 >>692 WM_KEYDOWNじゃなくてWM_CHARにして
wpがVK_RETURNだったらCallしないって感じでどうだろう。
//サブクラス化したプロシージャ
LRESULT CALLBACK _SubWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_CHAR:
if(wParam == VK_RETURN){
//処理
return 0;
}
}
return CallWindowProc();
}
>>698 すいません。どのように記述すればいいのでしょうか??
>>703 case WM_ERASEBKGND: return 0;
>>701 WM_CHARにしたらできました
教えて頂いてありがとうございます
LCMapStringって「ガ」を「ガ」に変換してくれますか?
>>700 GlobalAddAtomじゃダメかな?
>>708 やってみたら「ガ」を「ガ」になった。
すごいAPIだ
日本語おかしくてもプログラミングはできるんですね。
をかしくても良いぢゃない。日本語だもの。
>>704 ありがとうございます。
出来たのですが、ちと、おかしくなってしまいます。
WM_KEYDOWNでキー入力をすると画像を描画するようにしてるので、押しっぱなしにすると描画され続けてしまいます。
WM_KEYUPだとはなしたときなので使いづらいです。
キー入力で押し放しでも1回の入力にする方法って有りますか?
fRepeatでも見れば。
おかしいのはあなたの頭。
あるWindowに属するクライアント内にマウスカーソルがあるときは、WM_MOUSEMOVEでひろえばいいですが、 あるWindowに属するクライアント外にマウスカーソルがあるということがわかる、WMメッセージ(または何か別の方法)はありますか? カーソルがクライアント内からクライアント外へ出たことを知りたいもので。 宜しくお願いします。
>>712 2回目以降おなじコードなら無視すればいいじゃん
717 :
デフォルトの名無しさん :05/02/07 19:32:27
猫とかに書いてある、通常のウィンドウを表示するプログラムがありますが、 それと同じようなタイプのウィンドウをもう1つ出して、 新しく出た方のウィンドウにフォーカスを移したいと思います。 これを専門用語で言うと、STATICなPOPUPウィンドウを作り、 それをサブクラス化するでいいんでしょうか。 検索する時のキーワードにさせていただきます。
タイマでGetCursorPosでも発行しれ。
>>715 1.マウスキャプチャして検知
2.WM_MOUSELEAVEを拾う(Win 98以降)
>>717 モーグルダイアログが自分の探していた物っぽいです。
もう一度それを調べてみます。失礼します。
お前は冬季五輪にでも出場する気か?
私も質問した側で、答えていいか分かりませんが、 自分なら、WM_MOUSEMOVEが来る毎に、以下のような感じの関数を使い、 真なら、ウィンドウの中にマウスポインタがあるとします。 int CheckWindowCursorPos(HWND hWnd, POINT *point) { GetCursorPos(point); if(!ScreenToClient(hWnd, point)) return 0; return 1; }
>>719 マウスボタンを押さないで、検知したいので、それだと無理です。
>Winにおいては、WM_MOUSE_LEAVEは、WM_LBUTTON_DOWN後に TrackMouseEvent?();をTME_LEAVEを指定して呼び出した場合に一度だけ送信される。
でも、ありがとうございました。
orz・・。モーダルダイアログです。
WINDOW外れたらWM_MOUSEMOVEは来ないんだが・・・ WM_MOUSEMOVEが来るのは常にwindow内にあるときのみ
>>725 ええ、おっしゃるとおりで。
で、クライアント領域を外れたら、通知されるメッセージがあると助かるのですが、
ないとなると、自作システムを変更せざるえません。
すればいいじゃん。
>>725 そうですね。間違えました。
自分も、マウスの位置によって、処理の動作を変えるとか
やっているんですが、ウィンドウの中での位置でした。すみません。
キャプチャしまくれ
TrackMouseEventじゃないの?
テンキー押しっぱなしにしても1回の処理にするように出来ません・・・ 2回目同じコードなら無視する方法も考えてみたけど分からなかったです・・・・ どうすればいいのでしょうか?
がんばれ
>When the mouse is captured, menu hotkeys and >other keyboard accelerators do not work.
>>731 WM_KEYDOWNの説明よく見れ
lParamの0-15ビットにリピートカウント(押しっぱなしによって何度もキーが押されるた回数)入ってるから
キーリピートでの入力じゃない場合はすればよい。
>>734 どうもです^^
例など教えて頂けませんか?
736 :
デフォルトの名無しさん :05/02/07 21:01:16
アプリケーションで、GetSysemColorで取り出せるシステム色の一覧が見れるフリーソフトってありますか? あると便利なんですが。 Win32プログラミングで使いたいのです。
「コントロールパネル」->「色の設定」
>>731 >>735 すまんすまん、今良く見たら自分が勘違いしていた、
>>734 じゃできないわ。
だが、結局答えがWM_KEYDOWNの説明にそのまま書いてあったぞ。
lParamのビット30が直前のキー状態を保持してるので、その状態が離された状態なら初回と判断すればよい。
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg){
case WM_KEYDOWN:
if( ((lParam >> 30) & 0x00000001) == 0){ // 初回押下なら
// 初回押下時のみの処理
}
break;
}
}
MFCならこんな感じかな?
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags )
{
if( ((nFlags >> 15) & 0x00000001) == 0){ // 初回押下なら
// 初回押下時のみの処理
}
}
だがな
>>731 >>735 よ、なんていうか。
市ね
740 :
デフォルトの名無しさん :05/02/07 21:52:45
スレッドハンドルの閉じ方について質問です。 _beginthreadexで作成したスレッドは CloseHandleで閉じなければいけませんが、 スレッドが終了したら閉じるということを やりたい場合、どう書くのがいいのでしょうか? 今はスレッド関数を抜けるreturn文の直前で、 OnEndThread()みたいな通知関数を呼んで、 その中でCloseHandle()を呼び出す方法にしています。 このOnEndThread()で、CloseHandle()を呼び出す前に、 スレッドが確実に終了してからCloseHandleしたほうがいいのでしょうか? 思いつくのは、Sleep()で適当に待つか、 WaitForSingleObject()にタイムアウトを設定して無限ループで リトライをかける、ぐらいなのですが、こんなんでいいのでしょうか。 それとも気にしないでCloseHandleしていいのでしょうか?
気にしないでCloseHandleしていい
>>740 スレッドハンドルは使わないならスレッド作成直後に即CloseHandleしてもOK
743 :
デフォルトの名無しさん :05/02/07 22:17:13
>>741 ,742
単純、明快な回答ありがとうございます。
>スレッドハンドルは使わないならスレッド作成直後に即CloseHandleしてもOK
試してみて大丈夫だったんで不思議に思ってたんですが、
このことってMSDNとかに書いてあるでしょうか?
スレッドハンドルが必要になるのはスレッドの終了を待機するときだけ。
ニヤニヤ
そっか。ハンドルって媒介だから、必要なければ閉じちゃっていいんだ。納得した。
この調子だとCreateProcess()したときにプロセスハンドルもスレッドハンドルも閉じてないんだろうなぁ。
749 :
デフォルトの名無しさん :05/02/07 23:07:33
向こう側で PulseEvent に来る時点で ハンドルが閉じられてても動作保証あるのかって問いには 誰も答えられないのか
CreateProccessのMSDN記述に CloseHandle 関数を使って、プロセスのハンドルとメインスレッドのハンドルの両方を閉じなければなりません。 これらのハンドルが必要ない場合、プロセスを作成した直後にそれらのハンドルを閉じるのが最善です。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ とある。
目からうろこが。 おもっくそMSDNにも書いてあったし。 こういうお約束的なAPIって案外調べたりしないもんだから見落としてることもあるんだろうな。
>>748 えー、閉じなきゃいけないんですか?
てゆーか、CloseHandleって関数の存在を始めてしりました。
ファイル操作はfopen?
754 :
デフォルトの名無しさん :05/02/08 00:36:01
>>753 CreateFile に特有の機能が必要ないときは迷わず
ReadFileで読み込むと lpNumberOfBytesReadを特殊な条件化じゃないとNULL指定できないのが面倒なんだよなぁ
すみません教えてください APP(A)からDLL(B)を呼び出しているのですが、DLL(B)からさらにDLL(C)をLoadLibrayでロードしています。 DLL(C)からDLL(B)の関数をGetProcAddress()で読んでいるのですが、DLL(C)はハードコーディングで GetProcAddress(GetModuleHandle(NULL), "Foo") みたいになっちゃっていてどうもAPP(A)の空間しか見れて無いらしくDLL(B)の関数がGetProcAddressできてません。 明示的にAPP(A)の関数の名前空間にDLL(B)に関数も含めるにはどうすればいいのでしょうか?
NULLぽ
>>740 スレッドが終了するときに、 シグナル状態になるので、それを
WaitForSingleObject()あるいは
WaitForMultipleObjects()で検知して
で、スレッド終了後の処理を始めればいいんじゃないの
>>758 漏れはいつもそうしてる
スレッド作成直後にCloseHandle()する勇気がなかったんで…
逆に寧ろ、終了を知る必要がないならとっととCloseHandle()してしまうべきだと思うのだが。 子への通知はPostThreadMessage()でいいし、逆方向も子に適当なハンドルを渡しておいてそれにMessageを投げさせれば済むしね。
>>756 Read/WriteProcessMemoryかな。
CloseHandleなんて呼ぶ必要ないよ。
д・) >762がランチャーこさえたら…… A・) ガクブルガクブル
>>764 CreateProcess()はエンドユーザ向きじゃないので、
あまりランチャーでは使わんでしょ。
カスタマイズ可能なランチャーならShellExecute()にすると思われ。
>>756 APP(A)に"Foo"関数をエクスポートさせて(保障されてるかは知らない)
APP(A)の"Foo"からDLL(B)の関数を呼んでみてはどうだろか。
>>756 日本語が良く分からない
文を短くしろ
主語述語の関係をはっきりさせろ
>>756 >>766 と似たようなもんだけど、APP(A) で forwarder RVA で
DLL(B) の関数をエクスポートする。APP(A) の .def ファイルで、
EXPORTS
Foo = B.Foo
って書くのねん。(ファイル名が B.DLL の場合)
おぉ、目から鱗ビーム
770 :
デフォルトの名無しさん :05/02/08 16:01:55
Caretの真下に窓出したいんだけどCaretの高さってどうやって知るの?
ListView_SortItemsでリストビューをソートしようとしたんですが コールバック関数の第一第二引数が同じものがきていて機能しません。 いくつかサンプルみたんですがどれも同じようにやっていて、原因がわかりません。 知っている方いたら是非ご教示お願いします…
>>771 コールバックにくるlParam1, lParam2は各リストアイテム(LVITEM)のlParamだよ。
LVITEM挿入時とかにlParam同じの入れてればコールバックにも同じのしかこないよ。
一番簡単な流れで言うと
1:アイテム挿入時にLPARAMに重複しない連番を入れておく
2:コールバック関数内でFINDITEMとかでlParamの番号を元に目的のデータを持ってくる。
3:2で持って来た実データを比較し、比較結果を返す。
同じのしかこないなら
LVITEM挿入時にlParamに値入れてないのでは?(memosetやZeroMemoryでの0が入ってる)
すぐに閉じることが出来るけど、アプリ終了時に全てのスレッドの 終了をプライマリスレッドが待機できるようにとっておくけどなぁ。<スレッドハンドル
>>774 閉じられるとは言ってもスレッドハンドルいらないケースってまずないような気がするね
Load_Bmp(Back_DC,"test.bmp"); と記述すると、 'Load_Bmp': 識別子は、引数依存の照合を使用しても見つかりません。 とエラーが出るのですが、Load_Bmpの使い方間違ってますか?
>>776 LoadBitmapなら、Winuser.hで宣言されてるはずだけど
Load_Bmpという関数は知らないな
自作関数なら、宣言を見直せ
Load_Bmpとは何? Win32にあった?
>>772 >>773 レスありがとうございます。
lParamが未設定で、設定してもいかないので悩んでいたら
アイテム挿入時にLVIF_PARAMフラグを指定していなかっただけでした。
今までBCBでやっていたのでこういう部分はほとんど触れなかったんですが
なかなかおもしろいです。
ありがとうございました。
スレッドがウインドウプロシージャを必ず持つのならそれでも良いけどなw
>>760 子に終了メッセージを投げて、子から終了したよメッセージが来るまで
待機するのかな。で、その返答メッセージを親が受け取った時って、
子のスレッドは*完全*に終了しているのかな?
783 :
デフォルトの名無しさん :05/02/08 19:44:29
>>782 「終了したよ」メッセージではなく
「お手討ちにどうぞ」メッセージならどうかな?
_beginthreadexで本当に開放いいの? CreateProcessとかCreateThreadとかはいざ知らず。 英語にも日本語にも先に開放して良いと書いてないよ・・・
Cランタイム内で確保されたTLSはどのタイミングで解放されるんだろう。
VC++とか持ってるならCRT版の_beginthreadexなんかがなにやってるかはソース見れば分かる。
>>786 おおーソースあったのねん、知らなかった。thx
おおー、読んだ読んだ、なるほど。ありがと。
あと、NTカーネルのソースありませんか、なんちって
自作クラスのWindowStyleだけで使う独自な値って、どの辺の値にしたらいいもの? (EditTextだとES_LEFTの0x0000L〜ES_NUMBERの0x2000L辺りみたいだけど) 何か、WS_POPUPが0x80000000とかWS_TABSTOPが0x00010000とかみたいだし、 下4桁は自由に使っても競合しない?(他のクラスを継承した場合とか以外)
789 :
デフォルトの名無しさん :05/02/08 20:51:25
メインのウィンドウにエディットボックスを2つ表示してTABで移動できるようにしたくて CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 30, 30, 80, 24, hWnd, (HMENU)ID_EDIT1, hInst, NULL); CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 140, 30, 80, 24, hWnd, (HMENU)ID_EDIT2, hInst, NULL); CreateWindow("BUTTON", "ボタン", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP, 300, 30, 80, 24, hWnd, (HMENU)ID_BTN, hInst, NULL); としてみたんですが、ポーンって音が鳴るだけでした。 MSDN見てみたらWS_EX_CONTROLPARENTの説明が 「ユーザーが[Tab]キーを使って子ウィンドウ間を移動できるようにします。」 だったのでこれかと思ってCreateWindowExに変えてこのスタイルを適用してみたんですけど、 やっぱりできませんでした。何か間違っていますか??
エディットコントロールに一定以上の容量を確保したバッファを送るとキーボードからの入力を受け付けなくなるのですがなぜでしょうか?教えてください
791 :
デフォルトの名無しさん :05/02/08 21:45:12
9x系?
>787 このまえ流出したって騒ぎがあったな、そういや。
_beginthreadexはソースないだろ
/*** *threadex.c - Extended versions of Begin (Create) and End (Exit) a Thread * * Copyright (c) Microsoft Corporation. All rights reserved. 略
794の目はfusianasan?
797 :
デフォルトの名無しさん :05/02/08 23:02:45
warata
まー俺はウニバーサルだし、仕方が無い
799 :
デフォルトの名無しさん :05/02/08 23:13:59
うぱにしゃっと?
800 :
デフォルトの名無しさん :05/02/08 23:28:20
MDIにツールバーをつけ、ChildWindowを最大化するとツールバーに合体(?)せずに上書きしてしまいます。 これを回避するにはどうすればよろしいでしょうか? サンプルなどありましたら宜しくお願いします。
動的確保したメモリに音楽ファイルのデータを書き込んで そのデータを再生したいのですが、 <具体例> 暗号化した音楽ファイル(DAT) ー> 復号 ー> MP3として書き出す −> MICIで再生 ではなく 暗号化した音楽ファイル(DAT) ー> 復号 ー> データを再生 APIのみで何かいい方法はありませんか?
>>801 メディアフォーマットSDKあるからそれダウンロード汁(無料)
>>801 復号したデータをトリプルバッファでwaveOutWrite
>>802 どうも!
MSDNで”Windows Media Format 7.1 SDK”なるものを発見できました。
>>803 どうも!
”トリプルバッファ”で検索したら使えそうなサンプルが見つかりました。
早速試してみることにします。
>>804 トリプルバッファでストリーミング再生するとマルチスレッド組むようになるだろうから、
少し上のマルチスレッドのレスも参考にするとよいぞ
関係ないが、俺は昔、再生スレッドとwaveOutOpen()の同期を取り忘れてて気づくのに骨が折れたことがある
質問です。 CreateFile系API関数にはバイナリやテキストモードの設定できる項目がないようですが、 これはバイナリ形式しか取り扱えないということなのでしょうか?
質問です。 CreateFile系API関数にはアペンドモードの設定できる項目がないようですが、 これは上書き形式しか取り扱えないということなのでしょうか?
>>806 そうで御座います。
面倒だったら素直に fopen() でも使っとけ。
>>808 DWORD dwDummy;
HANDLE hFile = CreateFile("TestFile.txt", GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
SetFilePointer(hFile, 0, 0, FILE_END);
WriteFile(hFile, "Test\r\n", 6, &dwDummy, NULL);
面倒だったら素直に fopen() でも使っとけ。
>>809 _wfopen()を使うことにしました
>>811 _tfopenもよろしく
これもAPIじゃないけど。
813 :
デフォルトの名無しさん :05/02/09 15:38:52
listviewで指定した行を選択させるにはsendmessageにどういった引数を指定すればいいですか?
第1引数にHWND
2回呼ぶ 先にindex調べて次に中身
816 :
813 :05/02/09 17:21:39
例えば3行目の行を選択させるにはどの様にすればいいいですか?
ミリ秒単位の時間を得たい場合はどのAPIを使えばいいのでしょうか?
systemtime
GetSystemTimeだごめん
まぁ、単位がミリ秒ってのと精度は別なわけだが。
そういうなよ、 そんなら、あなたのパソコンはUTCに完全に同期してるとでも?
'定数 Const LVM_FIRST As Long = &H1000 Const LVS_EX_FULLROWSELECT As Long = &H20 Const LVM_SETEXTENDEDLISTVIEWSTYLE As Long = (LVM_FIRST + 54) 'コード SendMessage List1.hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, ByVal LVS_EX_FULLROWSELECT 指定行を選択させるには↑でいいでしょうか?
824 :
デフォルトの名無しさん :05/02/09 18:25:40
>>825 ほう、あんたが、精度というのを持ち出したんだろうが。
別時間で生きてる方にはわからんかもね
>>826 > ほう、あんたが、精度というのを持ち出したんだろうが。
別時間で生きてる方にはわからんかもね 820≠825 ですが何か?
> 別時間で生きてる方にはわからんかもね
説明できないので逃げるのですか?
うわあ、すげえバカ。
時刻の精度と時間の精度をごっちゃにするなよ
GetSystemTimeはUTCを得るものだがな バカだね、WindowsはりあるタイムOSでは無いのに
だから時刻合って無くても時間は測れるだろ。 まあGetSystemTimeでミリ秒時間を計測する奴もどうかと思うが。 Windowsでもミリ秒ぐらいなら十分正確に測れる。
寒天寒天!!
GetSystemTimeより、GetSystemTimeAsFileTimeの方がおすすめ。
>>812 APIじゃないってどういう意味なんですか?
macro?
VC独自のCRT.
CRTってモニタの事だよね。
ちがうよ
840 :
デフォルトの名無しさん :05/02/09 22:00:02
ついでに CRTは、モニタではなく、ブラウン管のこと。 だから、液晶CRTとかはありえない
時計としての時間じゃないけど 精度がほしい場合 QueryPerformanceCounter QueryPerformanceFrequency が良いとか聞いたような。 でもハード依存っぽい事説明に書いてあるし使ったことないしで詳しくは知らない(´・ω・`)
>>841 液晶CRTはヨドバシカメラにたくさん売られていますよ。
液晶のカソードって・・・
PerformanceCounterだけど、rdtsc使っている場合で、 動的にCPUのクロックが変わったときに、Frequencyの方は 古いまま、という問題があったようなきがする。
知人は、未だに空ループさせる事で時間調整してたりします。(タイマー使うの面倒なら、せめてsleep使えよ) ハードの性能がちょっと変わっただけで使い物にならなくなるソフト……
確か、Sleep(0)は意味があったよな。 CPUの独占使用を放棄して他のスッドレに処理を行う機会を与えるらしいが。
Sleep(0)は現在割り当てられているタイムスライスの残りを放棄する。 が、他にアクティブなスレッドが存在しなければ即座にまた戻ってきて、 結果的にスレッド切り替えのコストだけを浪費することになる。
>>848 アクティブなスレッドがないんなら、別にCPU時間を浪費してもいいじゃん。
空ループの離脱条件成立が遅れるなどの副作用はあるだろうけどさ。
ヤダヤダ!そんなのヤダ!
ループ中にSleep(0)を入れて効果を実感出来た試しがない。
実感しまくり。まあ素人はSleep(1)でもしてなさいってこった。
ウィンドウズのタスクマネージャみたいに現在稼動してるプロセスを一覧表示するにはどうしたらいいですか教えてください
EnumProcess
Sleep(0)するくらいなら、スレッドのプライオリティを下げる.。
ハンドルからそのウィンドウのサイズを取得するAPIを教えてくださ
GetWindowRect
>>849 CPU使用率が100%のままだとファンがうるさくなったりするらしい。
俺のボロPCには関係ないけど。
>>848 アクティブなスレッドが存在しないときはスレッドを切り替える必要が無いのだから、
切り替える先があるかどうか調べればいいだけなんだからそんなにコストは高くないだろ。
マルチスレッド組んでてSleep()使ってると同期取り忘れてること見落とすんだよねぇ… 俺はマルチスレッド使うときはSleep()使わんようにしてる。
見落とさなけりゃいいだろ
うわー・・・
なんかSleepが悪者扱いされとる。 使いかたが変なやつがバカだけなのに
>>864 というか、他人のソース見てたら、
「ここでSleep(1)しておくとうまく動く」
とかいうコメントが書いてあって呆れた。
Sleep(1)を入れるとうまく動くつーの、経験したこと有るな。 まぁ、納得いかなかったので、調べまくって修正したが。
872 :
デフォルトの名無しさん :05/02/11 00:12:47
説明できないヴァカと 説明不要のヴァカを 両方まとめて晒しage
Sleep(1)を入れるとうまく動くつーのは 自分より低い優先度のスレッドに実行機会が与えられるから。
フルスクリーン表示にしたいのですがどうすればいいのですか?
>>875 画面の大きさをしらべて、ウィンドウのサイズを最大にする
SetWindowLong(hWnd, GWL_STYLE, WS_POPUPWINDOW); ShowWindow(hWnd, SW_SHOWMAXIMIZED); でも戻し方がわからない・・・誰か教えてくれたらありがたいです
878 :
デフォルトの名無しさん :05/02/11 10:33:25
質問ですが、 システムカラーを得るには、GetSysColorですが、 システムで使われてるフォント名を得たい場合はどうすればいいのでしょうか?
SystemParametersInfo
880 :
デフォルトの名無しさん :05/02/11 11:02:34
質問 GetTextExtentを使って、デバイスコンテキストでの文字列の長さを得たんですが、 なんか微妙に異なるんですよね。 GetTextExtentを呼び出す前にデバイスコンテキストに設定するのは、フォントだけで問題ないですよね? 何か他にあります?
881 :
デフォルトの名無しさん :05/02/11 11:09:25
>>875 ゲームでフルスクリーンならChangeDisplaySettings()
882 :
デフォルトの名無しさん :05/02/11 11:17:35
>>878 SystemParametersInfoでフォント名は得られない。
確か、別な方法があったはず。
EnumFontFamilies
>>880 GetTextExtentなんてAPIはWin32にはないよ
自己解決 スマソ
学生プログラマなのですがよろしくお願いします LocalLockがよくわからないのですが 私の予想では LocalLockとは別のメモリ空間にあるデータの先頭アドレスを 自分のメモリ空間のポインタとして扱えるようにするでOKですか?
いやWin3の場合、ローカル移動可能メモリを移動不可能にして そのメモリのポインタを取得する。
>>887 回答ありがとうございます
調べてみたのですが固定メモリと移動可能メモリがあるんですね、
まだまだ勉強がたりないようです orz
APIの質問ではないかもしれないのですが CSVファイルを開いて そこから色々とやっていきたいのですが 例えば CSVに 東店,12000,300000 西店,5000,9000 という物が保存されていたき コレを参照したいときはやはりバイト数などで出すしかないのでしょうか? それとも何かいい関数などあるのでしょうか?
宿題スレがお似合いかもしれん
strtokで分割してやればいいんでない?
>>881 普通はIDirectDraw::SetDisplayModeじゃないか?
>>889 >東店,12000,300000
>西店,5000,9000
上記みたいに単純な形式ならばstrtok()が使えるけど、
実はCSVには少し複雑なルールがあったりするので、
結局は自力で解析処理を書くことになる。
CSVあたりはクラス自作しとくと便利
宿題スレはなんか雰囲気が違いました もうちょっと詳しく書いてみますと CSVまたはDATファイルの中が 日付,店舗ID,売り上げ,目標の順番になっていて 20040101,01,12000,30000 20040102,01,20000,21000 毎回決まった形となっているのですが バイト数で考えると難しそうなので 例えば配列を用意しておいてa[3] 最初の , が来るまではa[0]に代入 次の , が来るまではa[1]に代入・・・・・・a[3]に代入 としていこうかと考えているのですが ファイルを開いてからどのような関数で , などを認識し やっていけばいいのか見当もつかない状態になっています もっといい方法もあると思うのですが私が考えれるのはこのくらいでして strtok()で同じようなことが出来るでしょうか?
fgetc
つうかCのスレで聞けば?
>>896 Cの標準関数で普通にできるだろ。
標準関数群はOSごとのAPIの差異を吸収してどのOSでも共通のインタフェースで使えるようにしてるんだから。
900 :
デフォルトの名無しさん :05/02/11 14:24:54
店舗ID,店舗名 01,"店舗1" 02,"店舗2, (改装中)" 03,"店舗3"
APIとどう関係あるんだか
DB系のAPIまで視野に入れれば、CSVの扱いもAPIで済みますがな
カーネルサービス付近にしといてくださいな
あの〜最初から最大化で、そのあとウィンドウのサイズを変えられないようにしたいのですがどうすればいいのですか??
ODBCドライバでCSV用ドライバがたしか入ってるが
まあ、CSVだけのためにそんなことする人もあまりいないだろうが・・・
DBのデータをCSV出力したい場合とかは便利なのかな?
>>904 サイズ変更系ボタンつかないスタイルで作って最初から最大化で表示させればよいだけでは?
906 :
904 :05/02/11 16:58:52
>>905 そうなんですが、それの記述方法が分からなくて・・・・。
あと、普通に画像を表示させると、ちらつくので、ちらつかなくするには、CreateCompatibleDCとCreateCompatibleBitmapを使うことは分かったのですが、
どのように書けばいいのですか?
サンプルソースなどがあるサイトしりませんか?
オフスクリーンでビットマップを操作して、 PaintイベントでBitBlt
>>904 サイズ不変は、表示する時に^ WS_MAXIMIZEBOX ^ WS_THICKFRAME。
最大化は分からない。
あっ、通常のサイズ限定でのサイズ不変かも。
CreateCompatibleDCしてCreateCompatibleBitmapしてSelectObject。 WM_PAINTはGetClipBoxして↑のをBitBlt。
〜ハンドル型ってほとんどポインタですか?
はい
ハンドルとポインタは全く違いますが?
値は同じです
ポインタは数字なんだからintですよね?
実体が分かっているなら良いです。好きにキャストしてよいです
typedef void *HANDLE;
918 :
450 :05/02/11 20:01:13
先日質問した
>>450 のプログラムなんですが、
>>462 さんの示したようなパターンでマルチスレッドにしてみました。
通信スレッド -> UI スレッド: PostThreadMessage
UI スレッド -> 通信スレッド: PostMessage
ワーカースレッド -> 通信スレッド: PostThreadmessage
通信スレッド -> ワーカースレッド: SetEvent (通信終了の指示用)
この時ワーカースレッドは基本的に通信スレッドにメッセージを飛ばして
送信をさせるのみ。通信が切断したことを示す SetEvent のみを監視。
という構成でやっているのですが、ワーカースレッドの速度が激減してしまいました。
数10byte〜数100byte 程度の小さなデータを大量に送っている為なのでしょうか?
それとも使用している同期・メッセージ手段がマズいのでしょうか?
ワーカースレッドのループの中で Sleep(1) を入れると極端に遅くなる。
ワーカースレッドのループの中で Sleep(0) を入れると Sleep(0) よりは速いがやはり遅い。
しかも、データがちゃんと飛ばずに漏れているっぽい。
>通信スレッド -> UI スレッド: PostThreadMessage >UI スレッド -> 通信スレッド: PostMessage これは逆でした。 通信スレッド -> UI スレッド: PostMessage UI スレッド -> 通信スレッド: PostThreadMessage
つうか、せっかくスレッドみたいなメモリ共有も不要な軽い機構使ってるのに メッセージのやり取り必要なのか?
921 :
デフォルトの名無しさん :05/02/11 20:36:41
>>450 ってさあ、メインループでpeekmessage()でメッセージが無いときに
framemove()に飛ばすとすると・・・
・・・それで何か足りないものってありますか?
450?
450
結局、メッセージでシリアライズしてると言うこと? スレッドの意味無いじゃんw
>>922 長時間処理がしたいとの事のようなので
framemoveで何が足りないのかと・・・
framemove1回ごとにforループを1000回ずつ回す事を考えると
それで長時間処理が出来てんじゃないという事を言いたかったのです。
そりゃまずいよ
927 :
450 :05/02/11 21:05:35
ぐぐってみたのですが、DirectX に FrameMove というのが見当たりましたけどそれのことですか?
もしそうなら、DirectX を使っていないので私のプログラムには使えなさそうです。
>>924 シリアライズ・・・Java の Serialize とかですか?
でもあれはスレッドの話とは違ったような・・・。
そうじゃなくてスレッドとスレッド同期が多すぎるという事でしょうか?
どんな同期手段でも、同期の数が多すぎるといけないのか、
それとも Message 以外の適切な手段を選べばちょっとくらい多くても問題がないのか・・・。
>>918 ところで、メインスレッドはどこいった?
ついでに、一つのアプリケーション内なら、わざわざメッセージで投げる必要はないと思うが・・・
>>927 すまん、共有リソースがある場合、スレッドセーフじゃないリソースをアクセス
すると時は、時間はかかるがメッセージを使ってメインスレッドで安全に
シリアルに処理させるということ。
UI スレッド = メインスレッドです。 メインスレッドが通信先と通信を開始すると _beginthread でスレッドを起動、 接続が完了すれば、メインスレッドに接続した旨をメッセージで伝えています。 その後は、UI 側がデータを送信したい時は PostThreadMessage で通信スレに指示、 通信先からデータが来た場合には、メインスレッドにデータ受信メッセージを送ります。 時々長時間処理が必要になって、その場合は新たにワーカースレッドが作成されて、 そのスレッドが一方的に通信スレッドに PostThreadMessage で送信データを指示しています。 ワーカースレッドは接続が途絶えた事のみを検知しています。 メッセージは遅いんですね。CriticalSection とかを使って処理したほうがいいのか。 でも、処理が楽だし、UI を記述するのと同様に出来るのが楽なんですが・・・。 UI スレッドが何らかのメッセージを受け取るのと同じような処理をする場合は どうしていますか?WM_TIMER で CriticalSection の中を監視?
WM_CREATEを hdc=GetDC(hwnd); hmainwndsubdc=CreateCompatibleDC(hdc); hmainwndsubbmp=CreateCompatibleBitmap(hdc,640,480); ReleaseDC(hwnd,hdc); SelectObject(hmainwndsubdc,hmainwndsubbmp); TextOut(hmainwndsubdc,0,0,"ほげほげ",8); として WM_PAINTを hdc=BeginPaint(hwnd,&pt); BitBlt(hdc,0,0,640,480,hmainwndsubdc,0,0,SRCCOPY); EndPaint(hwnd,&pt); にするとウインドウが一面黒くなってしまうんだが、白くするにはどうすればいいのでしょうか?
文字の部分だけは周りが白くなってあとは真っ黒です。
オバキュー
>>930 人間が使うプログラムならメッセージでもそんなに人間がかんじられるほど
遅くなることはありません。
いまいち処理が分からんので、回答できない。
935 :
450 :05/02/11 23:37:24
基本的には人間が使うプログラムなんですが、
一部のデータは大量に送られてきます。
現時点では全部のデータが一度メッセージ経由で UI に送られています。
全部をメッセージ以外の軽い手段でやりとりするか、
通信スレッドがデータを確認してその大量のデータだけ軽い手段でやるかで悩んでいます。
前者の場合だと、
>>930 の最後の行に書いた通り、UI スレッドが受け取る手段が問題になりますし、
後者は後者で面倒が多いなと思っている所です。
>>931 TextOutの前に塗り潰しておく。
FillRectでもPatBltでもSetPixelでもお好きなように。
ExtTextOut最強。
939 :
800 :05/02/12 11:23:10
自己解決
>>450 >>918 >>930 ちょっとそこまでくるとソース全部見ないと相談されてもなんともいえないね。
とりあえずデバッグ出力あたりに処理毎に現在時刻と処理場所とか出力して
どこで遅くなっているか調べるのをおすすめする。
まず原因調べないとね。
一応今までの説明で遅くなりそうな点を書いとくと。(全然関係ないかもしれんが)
1:メッセージをUIスレッドに送信、またはUIスレッドから受信する箇所で遅延?
メッセージは通常のUIのメッセージ(WM_PAINTその他全部)と同じルートを使う為、
メッセージ量が多めであるUIスレッドを経由するとそこで待ち時間がでる可能性がある。
といっても通常は問題にならない。
しかし、UIのつくりそのものがおかしくて重い可能性もあるので一応。(闇雲にInvalidateRectとか)
2:通信スレッド・ワーカースレッドで無茶な処理をしていないか?
Sleep(0),Sleep(1)って言葉が出てきたので気になったんだが、
特に処理がない状態の場合に無限ループ的にまわしてたりしてないかな?
スレッド慣れてない人がたまにやるんだけど、「無限ループ的な待ち」は
スレッド使おうが使うまいが最低最悪の処理なので注意。
無限ループ使いはウィルス作者並みに取り締まるべきだろ。
C言語で構造化例外処理を扱うにはどうすればよいのですか。
943 :
デフォルトの名無しさん :05/02/12 15:33:33
MSDNを読めばよい
文字の表示は出来るんですが、数字の表示(足したり引いたりした物の表示)ができません・・・・・ どうすればいいのですか?
945 :
450 :05/02/12 17:20:29
1. UI 自体は特に重たくはなっていないようです。データのやりとりだけが遅いんです。
でも、UI のチューニングを特にしていないので
メッセージが多いとか、処理が重いとかはあるかもしれません。
2. ワーカースレッドは 100byte 未満の 10000 個のデータを送信しています。
始めにタイムアウト 0 の WaitForSingleObject で切断検知をして問題なければ、
データを PostThreadMessage で送信するというループです。
このループの末尾に、Sleep を入れてみたりしたのですが・・・。
通信スレッドは、タイムアウト 0 の WaitForSingleObject で
WSAEventSelect をチェックしてソケットからの読み出しを行い
データが揃えば UI スレッドにメッセージを送信し、
PeekMessage でメッセージを確認して、来ていたらソケットへ送信を行います。
これをループとして回していました。
とりあえず UI/ワーカーから通信スレへの送信要求をメッセージではなく
CriticalSection を使った物に変えてみました。
PeekMessage のところをクリティカルセクション経由で
バッファにデータが溜っていたら送信という風にしています。
この改変と通信処理の別の部分の見直しで多少改善したようです。
データのやりとりの速度が多少マシになって、
>>918 で書いた
データが途中で詰まって、ちゃんと来ない現象はなくなりました。
946 :
デフォルトの名無しさん :05/02/12 17:26:50
>944 wsprintf(buf,"%d点",n);
どんなスレッド(通信なども)も全部UIにして、スレッド間通信をすべて メッセージでやってるDQNコードは見たことあるな。
GetDC()で取得したハンドルは描画が終了したらReleaseDC()で 解放しなければなら無いらしいんですが 描画するたびに GetDC(); //描画 ReleaseDC(); ってやら無ければダメなんでしょうか? WM_DESTROYを受け取ったときにプロシージャでReleaseDC()とか無理でしょうか?
>>945 やっぱり見ないとなんとも言えんけど所々気になるところが・・・
>2. ワーカースレッドは 100byte 未満の 10000 個のデータを送信しています。
>始めにタイムアウト 0 の WaitForSingleObject で切断検知をして問題なければ、
>データを PostThreadMessage で送信するというループです。
メッセージ連続10000往復以上は確実に遅くなると思われるのでとりあえずメッセージ回数軽減したほうがよさげ。ってこれはもう改善済みかな?
タイムアウト 0 の WaitForSingleObjectでの切断検知ってのはデータが既にある場合の事で
データがない場合はWaitFor...系でウエイトしてるって事でいいのかな?
データない場合もタイムアウト0のWaitForSingleObjectでループしてたら送信していない以上送信速度に影響ないだろうが設計的にかなりいかんよ。
>通信スレッドは、タイムアウト 0 の WaitForSingleObject で
>WSAEventSelect をチェックしてソケットからの読み出しを行い
これがいまいちよく理解出来ないんだけどWSAEventSelect使ってるのにタイムアウト0のWaitFor...?
>PeekMessage のところをクリティカルセクション経由で
>バッファにデータが溜っていたら送信という風にしています。
これもいまいちよくわからん。
もしかして
while(bConnect){
EnterCriticalSection
if(BufSize){
Send();
}
LeaveCriticalSection
}
こんな感じでやってる?
説明見てて感じるんだけどスレッドとかWaitFor..系とかイベントオブジェクト
あまり使った事ないように見えるけどそうかな?だとしたらまずその辺から使い方調べた方がいいかも。
>>945 951で色々書いたがもしちゃんとわかってての話であれば951は聞き流してくれ。
お互い掲示板じゃそこまで細かくかけないしね(´・ω・`)
955 :
450 :05/02/12 18:57:24
>メッセージ連続10000往復以上は確実に遅くなると思われるのでとりあえずメッセージ回数軽減したほうがよさげ。ってこれはもう改善済みかな? 送信側だけ CriticalSection とバッファを使っています。 >タイムアウト 0 の WaitForSingleObjectでの切断検知ってのはデータが既にある場合の事で >データがない場合はWaitFor...系でウエイトしてるって事でいいのかな? データがなくなればスレッドが終了しますので、 データが無い場合でもループが回っているという事はないです。 >説明見てて感じるんだけどスレッドとかWaitFor..系とかイベントオブジェクト >あまり使った事ないように見えるけどそうかな?だとしたらまずその辺から使い方調べた方がいいかも。 API の仕様はなんとかわかってはいる(と思う)んですが、経験が少なくて・・・。 >こんな感じでやってる? CriticalSection からの送信要求の読み出しはそうですね。 for(;;){ if(WaitForSingleObject==WAIT_OBJECT_0){ 読み込み処理;必要なデータが揃えば UI スレッドにメッセージ送信; ※読み込み時に通信切断もチェック } EnterCriticalSection if(BufSize){ Send(); } LeaveCriticalSection } 送信要求もイベントを立てるようにして WaitForMultipleObjects を使って、 かつタイムアウトを 0 以上の値にした方がいいって事でしょうか。
956 :
デフォルトの名無しさん :05/02/12 19:00:29
>949 それが嫌になったらC++にしな
んと、わかってるのであれば聞き流してもらうって事で。 通りすがりのスレッド初心者に役に立つかもしれないし、一応スレッド関連の基本を以下に書くと。 1:特定のスレッドでWaitFor..系(あるいはSleep)使ってウエイト状態にしている場合、 そのスレッドは全く存在していないのと同じように扱われCPUその他リソースを消費しない。※ 具体的には 「スレッドA」UI処理 「スレッドB」for(;;)やwhile(bFlag)みたいに無限ループでフラグチェックなりをしていた場合。 CPUパワーの最大を100%とすると、 「スレッドA」CPU50%使用 「スレッドB」CPU50%使用 という状態になり、スレッドBで内容的には大した処理を行っていないにもかかわらずスレッドAは50%しか力を発揮できない。※ しかもスレッドBは常にフルパワーで動作することになるので、全く別のアプリケーションの動作にも影響が出てしまう場合もある。※ でも、 「スレッドA」UI処理 「スレッドB」WaitForSingleObject(hEvent, INFINITE)のようにした場合。 スレッドBはWaitFor..で完全に停止してるわけだけどこの場合 「スレッドA」CPU100%使用 「スレッドB」CPU0%使用 ということになり、スレッドAはフルに資源を活用できる。※ つまり、特に用がなければスレッドは出来る限りWaitFor..等で待機しておくのが望ましいというか普通という事になる。 ※厳密に言えば大嘘だらけになるが、概念をわかりやすく説明する為にあえて大嘘ついております。
非可視のウインドウを持ったUIスレッドを作りまくる奴いるよね。 ワケワカラン
>957 説明をダウンサイジングして用語を標準化してくれる?
960 :
デフォルトの名無しさん :05/02/12 19:25:07
c++にて、Write/GetPrivateProfileStringを使ってるんですが 日本語(text=hogeホゲ のような)データは扱えないんでしょうか? 文字化けしてしまうのですが…
>956 MFCってことでしょうか? C++を使ったwinプログラムって他にもありますか?
962 :
デフォルトの名無しさん :05/02/12 19:34:02
>960 UTF-16にしてバイナリ扱いにすれば? Get..Struct
つづき んで、WaitForを活用する為に一番使われ、使いやすいのがイベントオブジェクト(CreateEventで作るやつね。) イベントオブジェクトは文字通りイベントが起きたときに使う。 WaitForSingleObject([イベントオブジェクト], INFINITE) とした場合イベントオブジェクトのイベントがOFF場合、WaitForSingleObject関数を抜けない。(そしてリソースを一切消費しない)※ イベントONになるとWaitForSingleObjectを抜けて次に進むことになる。 具体的な使用例を言うならば 開始時に スレッドA(UI & メインスレッド) スレッドB(作業スレッド) を作成し、スレッドBではWaitFor..でウエイトさせておく。 UIの特定のボタンが押されたら特定のバッファにデータをデータを入れイベントをONにし、 後の処理はイベントONによって開放されたスレッドBが行う。(スレッドAはUI処理に戻る) もうすこし具体的な使用例を書くならWaitForMultipleObjectsでの待機になるかな。 for(;;){ Result = WaitForMultipleObjects // 「処理行えイベント」・「アプリ終了その他中断命令イベント」・「通信切断イベント」の三つで待機 if(Result = XX){ // WaitForMultipleObjects の戻り値でどのイベントがONになったかある程度判別可能なのでイベントにそった処理を行う } } このようにスレッドはWaitFor...とイベントその他を活用すれば資源を無駄にせずに有益に使用できる。※
964 :
デフォルトの名無しさん :05/02/12 19:49:17
>961 未チェック。 class MyDC{HDC hd_; HWND hw_; public:MyDC(HWND hw):hw_(hw) {hd_=GetDC(hw);} ~MyDC(){ReleaceDC(hw_,hd_);} operator HDC(){return hd_;} };
つづき んで複数スレッドを使用した場合の問題として BYTE cbData[255] みたいなバッファがあった場合使い方によっては スレッドAでcbDataにデータを入れている途中でスレッドBでcbDataからデータを読み出す、という自体が起こる。 当然データはむちゃくちゃになるし、それ以外のもっと深刻な問題も多数発生する。 そんな時に使うの「クリティカルセクション」これはデータ保護のために使用するものであって、 イベントやWaitFor等とは目的が全く異なるものになる。(というか使いにくいし、それ用にイベントとかその他があるのでそっちを使う) 具体的には CRITICAL_SECTION CObj; BYTE cbData[255] Send() { EnterCriticalSection(&CObj) // cbDataのデータを読み込み全て送信する LeaveCriticalSection(&CObj) } Recv() { EnterCriticalSection(&CObj) // ○○からもってきたデータをcbDataに全て格納する LeaveCriticalSection(&CObj) } としておけば。 スレッドAでSend()スレッドBでRecv()が同時に発生した場合、動作的には 先にEnterCriticalSectionに入った方のスレッド処理が行われ、後からEnterCriticalSectionnに入ったスレッドは先EnterCriticalSectionに入ったスレッドが LeaveCriticalSectionするまでEnterCriticalSectionnでウエイト状態になる。 結果として、cbDataは一つのスレッドしかアクセスしないように出来るという事になり、安全になる。
966 :
デフォルトの名無しさん :05/02/12 19:58:42
>965 そんなベタな説明するくらいなら自分のホムペに書け。マジで邪魔だ
長すぎるしなんか方向ずれてきたのでやめておくね orz
>>966 >>955 のループの使い方だと結局無限ループ的動作になるって事が言いたかったのorz
クリティカルセクションがデータ保護だけではなくてイベント&WaitFor..待機的目的で使われてるように見えたので・・・
取りあえず教は寝ます。ごめんねorz
最後って言ったけどもう一個だけ、このままだと450氏用になんの役にも立たないのでorz 1:送信回数を減らすことによって処理を早くする為に 100byte以下を10000回送信する部分を可能であれば一つにまとめて送信する。 大き目のバッファに溜め込んでおいて実際には送信せずそのバッファに入れるだけ。 バッファが満杯になったらイベントを立て、実際の送信処理を行わせる。 2:実際の送信部分の if(BufSize){ Send(); } を Waitfor...(バッファ満杯イベント) Send() のようにうまいこと改造する。 こんだけでもかなり変わるはず。今度こそ最後です、orz ドゲザ
>>969 WinSockの2.0はイベントでやりとりするっしょ。
メッセージでやり取りするのは、Win16の遺物であるWinSock1.1
InterlockedIncrementとInterlockedDecrement APIは、 特定のリソースの排他制御に適する。 TryEnterCriticalSectionも見よ。
>>945 >2. ワーカースレッドは 100byte 未満の 10000 個のデータを送信しています。
数が多すぎる問題は当然として、
こんだけ多いなら、ワーカースレッドからそのまま通信したほうがよくないか?
>>971 耳学問?
実用のWinscokプログラムの経験ないのかな。
>>974 メッセージでI/O完了ポートを使えるのか。初耳で砂。
>>976 ひょっとしてイベントが同時に待機できる最大数を知らないの?
「よりによってWSAEventSelect()を引き合いに出すとは厨丸出しだな。」 と言うのはみっともないから我慢しようかと思ったが、我慢が体に悪いので言うことにしました。 厨丸出しだな。
979 :
デフォルトの名無しさん :05/02/12 20:52:17
そこでI/O完了ポートですよ。
一行レスで、HNもなく、IDもないと、 誰が、どういう立場にたって、知識をどういう方向で使おうとして発言してるのかわからない。
MFCのCAsyncSocketを黙殺する
>>976 は稀有な存在。
I/O完了ポートって、ハンドル数の制限あったっけ?
>>982 WaitForで待つなら、Win4までだと64。
APCだと関係ないな。
サービスでウインドウを作りたくねえよなぁww
>>951 (945とは違う人だけど)
これから学ぼうかと思ってた自分にとっては、こういう解説は有難かったり。
とまぁ、埋めついでに
986 :
450 :05/02/12 22:30:05
>>951 さん
ありがとうございました。
色々と見直してみます。
>>I/O 完了ポート
ところで I/O 完了ポートに関しての初心者向けの説明・資料ってありませんか?
Winsock FAQ とかに名前は出てくるのですが、詳細が不明で・・・。
オーバーラップド I/O とか言うのもあるんでしたっけ・・・。
char str[32]; wsprintf(str, "こんにちは"); TextOut(hdc,0,0,str,strlen(str)); と書いてビルドすると、 TextOut(hdc,0,0,str,strlen(str)); 上に対して warning C4267: '関数' : 'size_t' から 'int' に変換しました。データが失われているかもしれません。 という警告が出ます なぜなのでしょうか?
989 :
デフォルトの名無しさん :05/02/12 23:27:02
インストーラが行っている処理について調べているのですが… コントロールパネルの「プログラムの変更と削除」で表示されるプログラム一覧に 登録するためのAPI、もしくはそれを管理しているレジストリ等があれば教えてください。 どうぞよろしくお願いします。
>>988 strlenの返り値型はsize_t、TextOutの引数型はint。
size_tからintに変換して、データが失われているかもしれないから。
991 :
デフォルトの名無しさん :05/02/13 00:01:09
>988 strlenの戻り値はsize_tで size_tはunsigned intの変名。 TextOutの第5引数はintだから、 キャストしなきゃ警告が出る。
むう、2分遅れか。orz
(int)strlen(str)
>>994 あ、警告でなくなりました!
どうもありがとうございました。
996 :
デフォルトの名無しさん :05/02/13 03:45:52
"c:\foo\bar\..\"を"c:\foo\"に変換する関数ってないですか?
GetFullPathName で出来たと思う
999
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。