1 :
デフォルトの名無しさん :
04/09/19 04:11:44
2 :
デフォルトの名無しさん :04/09/19 04:13:01
(´゚Д゚`)
2げっとー はじめてやった わーい
がーん
8 :
ほんたま :04/09/19 08:43:47
おみゃ〜らよ、WideCharToMultiByteを使って、unicodeをsift-jisに変換すると、漢字はちゃんと変換されるのに、半角英数は文字化けするのよ。 unicodeが「4F 00 4B 00 27 59 0B 4E B9 5B 50 5B」の場合、これは「OK大下容子」の意味だ。 これをchar型の文字列pctextに取得して、この時点でpctextの内容をMessagBoxで表示してみると「ok'Y・Nケ[P[」だ。 これをWideCharToMultiByteを使って変換し、変換した文字列temptextを表示してみると「?大下容子」になっているんだ。 おみゃ〜らよ、なぜOKはちゃんとならないのかな? これ、教えれ、ばかおみゃ〜ら、こら!!!!!!!
9 :
デフォルトの名無しさん :04/09/19 08:45:27
10 :
ほんたま :04/09/19 08:55:34
お前ら、よく聞け。 アプリを常にタスクバーの前面に置くために、 タスクバーを親に指定してウィンドウを表示しているヤシいると思う。 XPSP2適用後だと、その前面表示アプリのせいで、 スタートボタンから展開されるはずのポップアップ形式のメニューなどが、 不意に閉じてしまう現象が起こるようになった。 XPSP2では、親をタスクバーにしているアプリは要注意だ。
親をタスクバーにする理由を教えて欲しい HTND_MOSTTOPだっけ? そんな感じの指定すりゃいいのに
15 :
デフォルトの名無しさん :04/09/19 12:56:21
dj
>>14 > アプリを常にタスクバーの前面に置くために
HWND_MOSTTOPじゃならないんだ
d$
ListViewむかつく。 なんで、カラムを追加するときはindexを指定するのに アイテムを追加するときはデータの中にindexが含まれてるんだ?
21 :
デフォルトの名無しさん :04/09/19 15:47:41
はぁ?
>>20 の発言を重く見たゲイツは強権を発動
$70兆を投与し現行のWindows全てにパッチを当て
リストビューアイテム追加時のデータからindexを分離した
897 名前:デフォルトの名無しさん[sage] 投稿日:04/02/29(水) 22:21:15
ListViewむかつく。
変更が少ないカラムは良いけど、
アイテムデータにはindexを含めろよ。別管理マンドクセ。
今年の2月29日は日曜日じゃなかったか?
ぐだぐだだな。
コントロールパネルの地域のオプションに基づいた日付や数値の整形をしたいのですが その情報はどこで得られるのでしょうか。
>>25 日付はGetDateFormat、
数値はGetNumberFormatで整形できる。
形式を知りたいだけならGetLocaleInfo。
>>26 ありがとうございました、そのまんまですね。
GetDateFormat/GetTimeFormatは見つけていたのにNumberFormatは見落としていたようです。
IShellFolder2::GetDetailsOfでループを回してカラムを取得しているのですが、 所有者の次、作成者の前に details.str が L"" の要素が列挙されます。 エクスプローラのカラムのカスタマイズでは出てこないのですが、これは何なのでしょうか?
GetDefaultColumnState/SHCOLSTATE_HIDDENでふるいに掛けて自己解決しました。
エディットボックスについてです。 EM_REPLACESELで文字を最後に追加した時に、 勝手にスクロールしないようにするにはどうすれば良いでしょうか? スクロールバーの位置を弄ってみたんですがだんだんずれて行きます。 SDKだけで作ってます。 いい方法があれば教えてください。 リッチエディットでも構いませんっ
すみません、解決しました。
32 :
デフォルトの名無しさん :04/09/20 13:20:00
アプリ開発プログラマーからの視点で聞きたいのですが、 MapFanやデジタル全国地図などのように、オンラインで多ユーザーの同時アクセス、 大きめのデータのやりとり(地図ベクトルデータ)を前提にしたシステムを 作る場合、データ送受信においてはどういったアプローチがベストでしょうか?
32 ロードバランサー & LAMP
//下のようなコードがあるのですがWM_NOTIFYメッセージが送られてきません。 //何が悪いのでしょうか? #include <windows.h> static LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ) { NMHDR* nmhdr; switch( msg ) { case WM_DESTROY: PostQuitMessage( 0 ); break; case WM_NOTIFY: nmhdr = (NMHDR*)lp; if( nmhdr->code == BN_CLICKED ) { // hogehoge } break; default: return DefWindowProc( hwnd, msg, wp, lp ); } return 0; } //続きます
//続きです extern int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) { WNDCLASSEX wcex; HWND hwnd; MSG msg; BOOL res; wcex.cbSize = sizeof(wcex); wcex.style = 0; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wcex.hCursor = LoadCursor( NULL, IDC_ARROW ); wcex.hbrBackground = (HBRUSH)COLOR_WINDOW; wcex.lpszMenuName = NULL; wcex.lpszClassName = "test"; wcex.hIconSm = NULL; RegisterClassEx( &wcex ); hwnd = CreateWindowEx( 0, "test", "test", WS_OVERLAPPEDWINDOW, 0, 0, 300, 300, NULL, NULL, hInstance, NULL ); CreateWindowEx( 0, "BUTTON", "test", (WS_CHILD|WS_VISIBLE), 100, 100, 100, 100, hwnd, (HMENU)0x1000, hInstance, NULL ); ShowWindow( hwnd, nShowCmd ); UpdateWindow( hwnd ); while( ( res = GetMessage( &msg, NULL, 0, 0 ) ) != 0 ) { if( res > 0 ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } } return 0; }
Delphiスレから移動して参りました。 ListViewを仮想リストビューとして使っています。 項目の表示などはちゃんと出来ているのですが、 Shiftを使用した複数選択をした際に、選択情報が LVM_GETNEXTITEM などに反映されないようです。 (LVM_GETNEXTITEM で選択アイテムを数えるプログラムを書いてみましたが Shiftによる選択を除いて、ちゃんと動作しました。) これは、ListViewの仕様なのでしょうか?
すいません。ボタンとかには送らないとMSDNに書いてありました。∧||∧
すいません、
>>36 の質問は取り消させて頂きます。
どうやら、Delphi での私の書き方が悪かったようです。
この件を確認してくださった方がいらっしゃたら、すいません。
>ボタンとかには送らないとMSDNに書いてありました。 そりゃそうだ。通知メッセージは、コントロールが親に送るもんだから BN_CLICKED なら WM_COMMAND だよ
WNDCLASSEXの、 cbWndExtra→Set[Get]WindowLong cbClsExtra→Set[Get]ClassLong がわかったのですが、これはどのように使い分ければいいのですか?
>>40 cbWndExtra→ウィンドウ毎に固有のデータを格納
cbClsExtra→ウィンドウクラスから作られた全てのウィンドウが共有するデータを格納
42 :
デフォルトの名無しさん :04/09/21 16:55:03
ビットマップ読み込みして、そこに文字を書き込むプログラムを作っています Windows2000、XPpro(日本語、英語版)、Windows98(日本語版)では文字が縦に 出力されるのですが、Windows98の英語版でのみ、文字列が横並びに出力されて しまいます。 読み込みをしているビットマップのサイズは縦x横=828x1165ですが、 何かWindows98での制限とかあるのでしょうか? hDCCC = GetDC(0); hBitmapDIB = ::CreateDIBSection(hDCCC,bif,DIB_RGB_COLORS,(VOID**)&pDIB,NULL,0); hDCBB = CreateCompatibleDC(hDCCC); ReleaseDC(0,hDCCC); hBMMM = (HBITMAP)SelectObject(hDCBB,hBitmapDIB); hFOnt = CreateFont(iFontHeight,0,2700,2700,FW_REGULAR,FALSE,FALSE,FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,PROOF_QUALITY, FIXED_PITCH | FF_MODERN,NULL); hFOOO = (hFOnt)SelectObject(hDCBB,hFOnt); SetBkMode(hDCBB,TRANSPARENT); TextOut(hDCBB,dwX,dwY,buf,strlen(buf)); ::CopyMemory( (BYTE*)m_lpNewImage + m_nHeaderSize,pDIB, m_nImageSize ); SelectObject(hDCBB,hFOOO); SelectObject(hDCBB,hBMMM); DeleteObject(hFOnt); DeleteObject(hBitmapDIB); DeleteDC(hDCBB);
43 :
ほんたま :04/09/21 20:56:54
おみゃ〜らよ、Win32APIでRECT構造体を使う関数ってよくあるだろ? あれは、別にRECT構造体でなくてもいいんだぞ。 自分でKINTAMA構造体をつくって、そのメンバをOMANKO1、OMANKO2,OMANKO3,OMANKO4という4つのint型にして、 rect.left、rect.right、rect.top、rect.bottomのかわりに、 KANTAMA.OMANKO1、KANTAMA.OMANKO2、KANTAMA.OMANKO3、KANTAMA.OMANKO4をつかってもまったく問題ないぞ!!!
44 :
ほんたま :04/09/21 20:57:33
おみゃ〜らよ、RECT構造体ばかりではないぞ! WINで定義されている構造体は全部そうだ。 おみゃ〜らよ、WINで定義されている構造体を使う必要はまったくない。 メンバの型と数さえ同じなら、自分で好き勝手な構造体を作って、それを使ってもまったく問題ない!!! おみゃ〜らよ、知らなかったろ?
>>44 詰め物の位置や数も気にしないで良いんですか?
46 :
ほんたま :04/09/21 21:14:52
>>45 正確に言うと、詰め物で気にしなければならないのは、数、型、順番だ。
逆に言うと、詰め物の数、型、順番さえ合っていれば、WIN定義の構造体を使わなくてもいいってことだ。
自分で好き勝手な構造体をつくって使えばいい。
彼は詰め物=構造体の各メンバだと解釈したらしい。
CreateWindowでクライアント領域にはっ付けたボタンのキャプションのフォントを 変更するにはどうすればよいのでしょう?
↑フォントというかサイズが大きいので小さくしたいのです。
WM_SETFONT
>>51 危うくオーナードローに踏み切りかけました。ありがとうございまs
53 :
デフォルトの名無しさん :04/09/21 23:25:17
ほんならやー、CRectオブジェクトへのポインタは RECT構造体へのポインタにキャストしても 使えるねんでーたぶん。
あ、ポインタじゃなくてもいいか
何でほんたまは当たり前のことを説明してるだけなのに偉そうなんですか。 誰か教えてください、
56 :
デフォルトの名無しさん :04/09/22 01:40:55
スレッドが二つ、スレッド1とスレッド2あったとします。 スレッド1からスレッド2にPostMessage()で ある構造体typedef struct foo_tag{...}FOO;をポインタで渡す場合、自動変数で渡した方がいいのでしょうか? それともmallocした方がいいのでしょうか。 どういう指針で考えたらいいのでしょうか? (1)FOO foo; PostMessage(hwnd,MSG,&foo,0); (2)FOO *foo PostMessage(hwnd,MSG,foo,0);
1は消滅する
すみません、日本語がおかしかったので再度。 スレッドが二つ、スレッド1とスレッド2あったとします。 スレッド1からスレッド2にPostMessage()で ある構造体typedef struct foo_tag{...}FOO;を渡す場合、自動変数で渡した方がいいのでしょうか? それともmallocした方がいいのでしょうか。 どういう指針で考えたらいいのでしょうか? (1)FOO foo; PostMessage(hwnd,MSG,&foo,0); (2)FOO *foo PostMessage(hwnd,MSG,foo,0);
1は消滅する
>>57 渡された側でディープコピーすれば値はわたるが、
他のスレッドがこのPostMessageを呼び出す関数を使ったときにこのfooのスタック領域を上書き(初期化)してしまうということですね。
>>60 んー?「このPostMessageを呼び出す関数を使ったとき」に限らないよ?
違う。PostMessageはSendMessageじゃない。 変数の生存期間の問題なんで自分でタイミングを完全に理解できてないと 自動変数を使うのはまずい。
63 :
デフォルトの名無しさん :04/09/22 02:38:21
>>62 つまりSendMessageは同期関数で、PostMessageは非同期関数。
非同期関数はメッセージを渡したらすぐにリターンするから、Postされた側は処理を継続できる。
タイミングとは、Postされた後にその渡された&fooを呼び出した側でまた操作する(消去したり、値を変えてしまう)のはいつか
ということですね。
64 :
デフォルトの名無しさん :04/09/22 07:48:04
スタックってスレッド毎に独立してるんじゃなかったか? だったらSendだろうがPostだろうが自動変数は使えないだろ。
ごめん、なんか勘違いしてた。 わすれてください
排他制御した方が良いような希ガス。
矩形でないところへ bitmap の絵を貼り付けるため、24 bit color の色を SetPixel() で、HDC に埋めていますが、色が元のとは違います。 元のは、暗い褐色なのに、青黒いのです。HDC の設定でなにか必要に思え るのですが、なんでしょうか。BeginPaint() 以降なにもしていません。
>>67 自己レス。B と R が逆だった。うかつ。
>矩形でないところへ bitmap の絵を貼り付けるため リージョン使って SelectClipRgn してから BitBlt するのが普通
70 :
デフォルトの名無しさん :04/09/22 12:27:37
WindowsのIDはどうやって取得しますか? マイコンピュータ右クリック→システムのプロパティ→全般タブで 使用者: のところに出ている xxxxx-xxx-xxxxxxx-xxxx の文字列のことです.
レジストリ HKEY_LOCAL_MACHINE の Software\Microsoft\Windows\CurrentVersion
MultiByteToWideCharなんかのWideChar(UNICODE)ってのは 終端ヌルも含めオール2バイト(UTF-16?)でいいのですか? WORD境界にそろえろと言われたもので調べています。
>終端ヌルも含めオール2バイト そうだと思います。
75 :
デフォルトの名無しさん :04/09/22 14:41:20
>>73 2バイト単位の符号であることは確かです。
最近はサロゲートペアをサポートしているようなので1文字=2バイトとは限りませんが。
了解です WORD単位ならOKなので。ども
77 :
デフォルトの名無しさん :04/09/22 16:10:02
C+ウィンアプリ+SDKのメッセージループ外で、 PostQuitMessage or PostMessage(WM_APP)を行っても大丈夫でしょうか。 メッセージループ外でそれらを行い、メッセージループに入った時、 待ち状態にならないように、すぐにメッセージ処理を行いたいのですが。
>>77 むしろメッセージループ内で行ってるのを見たことないけど
最初にPeekMessage呼び出してメッセージキューを作っておく必要があるんじゃないの?
82 :
デフォルトの名無しさん :04/09/22 19:56:45
DefWindowProcは、他のメッセージをやった後、行うのはダメなのでしょうか。
デフォルト処理が自前処理と重なってわやなことになる場合もあるから メッセージの説明をMSDNで確認すれ
STRRET::uTypeがSTRRET_OFFSETの場合、 返ってくる文字列はワイド文字列なんでしょうか? MSDNにはpidlの先頭からのオフセットとしか書いてないし、 STRRET_OFFSETを返す例を見つけられないので調査も出来ないです。
>>86 ぐぐった限りでは char* にキャストしている例ばかりがヒットした。
もしかして SHGetFileInfoA と SHGetFileInfoW で違うのかもしれない。
あいまいですまん。
RFC2104に記述されているHMAC:メッセージ認証のための鍵付ハッシング について実装したいと思っているのですが、実装方法分かる方 いらっしゃいますでしょうか? 通常通りハッシュ生成を行い、RFCに記述されている H(K XOR opad, H(K XOR ipad, text)) の通り計算を実装すると正しく出力されたのですが APIヘッダとか見ているとHMAC_INFO構造体とか色々用意されていて 自分で実装しなくても算出してくれそうなのですが使い方どうも よくわかりません。 CryptCreateHashのhKeyに正しいKeyを渡せば上手くいきそうな 雰囲気なのですがそのhKeyが?(これであっているか不明ですが) とりあえず困らないのですけど気になってしょうがない。
>>86 ヘッダ見たら
#define STRRET_OFFSET 0x0001 // Use STRRET.uOffset to Ansi
って書いてあった。orz
なら ANSI 文字列でいいのだろう。
>>69 ヒントを有難う。3次元座標の空間に bitmap を浮かべて、マウスで
空間を動かすと、台形になったりひし形になるのを試している。
パース修正っていうのかな。
>>89 ありがとうございます。
まさかMSDNに書いてない事がヘッダに書いてあるとは。
大変参考になりました。
92 :
デフォルトの名無しさん :04/09/23 02:40:18
Sleep(1)って本当に1ミリ秒なんですか? なんか使っててもっと長いようなんですが。。。
Sleep(1)なら最低でも1ミリ秒以上は戻ってこない。いつ戻ってくるかはなんの保証も無い。
94 :
デフォルトの名無しさん :04/09/23 03:33:09
使えないAPIですね。さすが糞OS。
正確な計測を行いたければ代替手段がありますが何か?
timeBeginPeriod() で Sleep() の精度も変化
>>94 最低でも1ミリ秒は、他のプロセスやスレッドにCPU処理を譲るという意味で、
ちゃんと役に立っているよ。
糞OSなのもわかるけど、正しい使い方をしないで糞というのもどうかと。
彼はWindowsを憎んでいるのです
99 :
デフォルトの名無しさん :04/09/23 05:05:54
ボケーしね,とりあえず怒った
>>94 ちなみにLinuxのリアルタイム処理はもっと使えない。
つーかリアルタイムOS使えよ
102 :
デフォルトの名無しさん :04/09/23 09:01:57
ソフトしかわからん奴の限界
103 :
デフォルトの名無しさん :04/09/23 10:15:12
>>102 最近ハードウエアについて学んだ学生さんですか?
104 :
デフォルトの名無しさん :04/09/23 10:41:56
まだ10年の若輩者です
義務教育10年目
計測をするなら、お手軽なのはGetTickTimeを使う 出来るだけ正確に測定したい場合は、QueryPerformanceを使う
>>106 QueryPerformanceCounterって
一部の古いPentiumProマザーボードで正常な値を取得できないとか
一部のマルチプロセッサ環境で異常な値を返す場合があるとか
SpeedStepやCnQなどのクロック変化で正確な時間が測れない場合があるとか
噂やネットで聞くがどうなんだろう
GetTickTime
>>107 やねうらお氏のWebページか、書籍に詳しく書かれてる。
ちゃんとまとめてあるし、実験&考察までしているのはここだけじゃないか?
またうらおか
WM_GETMINMAXINFOが通知されるときの MINMAXINFOのデフォルト値を調べることってできますか? ウィンドウプロシージャの中でやるのはナシ
DefWindowProc(hwnd, WM_GETMINMAXINFO...)
>>112 アリガトゴザマス
でも、lParamには一体何を渡せば・・・。
114 :
デフォルトの名無しさん :04/09/23 20:18:22
シンプルな枠なしウィンドウ (2chブラウザで >>番号 にマウスを移動させると出現するポップアップのようなもの) を作りたいのですが、これはWIN32APIの周りをいじると実現できるのでしょうか? 以下、試しにrubyで書いてみたのですが、こんな大げさなウィンドウを作る必要がなくて、 テキスト情報をもっとシンプルにポップアップしたいのですが… require 'Win32API' msgbox = Win32API.new('user32', 'MessageBox', 'LPPI', 'I') msgbox.call(0, 'Message Box', 'test', 0) ご存じのかた、情報のポインタだけでも教えていただけないでしょうか。
>>114 2chブラウザのポップアップウインドウは普通ToolTipをつかっているはず
Win2k以降でIShellDetailsはIShellFolder2に取って代わられたと書いてあるのですが、 特定のフォルダ(タスク等)でIShellFolder2の取得に失敗します。 タスクの場合は、IShellDetailsの生成に成功するのですが他のフォルダの場合は IShellDetailsに失敗してIShellFolder2で成功するようです。 IShellFolder2生成 if (失敗) IShellDetails生成 if (失敗) エラーか、独自処理 って感じで良いんでしょうか? >For Windows 2000 and later systems, IShellDetails is superseded by IShellFolder2. を見るとObsoleteな扱いになってるように見えるのですが。
>>113 自分のウィンドウにWM_GETMINMAXINFOが来たときのlParamには何が入ってる?
>>117 というよりも、どちらかと言うと、
その値を調べたいのです
やっぱりWM_GETMINMAXINFOに張りついてないと
いけないんでしょうかね・・・
だから呼び出し元でMINMAXINFO構造体を用意して、 lParamにそのアドレスを渡せっていう話だろ。
120 :
114 :04/09/24 05:50:26
>>115 ありがとうございます。試しに以下のコードでTooltipを表示してみたのですが、
require 'vr/vrcontrol': require 'vr/vrtooltip'
class Form4ToolTip < VRForm
include VRDrawable
AREA = [0,0,110,110]
def construct
self.caption = "tooltip"; self.move 10,10,110,110
tt = createTooltip; tt.addToolArea AREA,"てすと"
end
end
VRLocalScreen.start(Form4ToolTip)
できれば、元になるウィンドウ無しにツールチップだけ表示することはできないでしょうか。
たとえばIEのテキスト入力画面でカーソルの位置に突如ポップアップを出すとか。
babylonとかドクターマウスとか、翻訳系のアプリケーションの場合には、
元になるウィンドウ関係なしにポップアップ表示が実現されているのですが、
あーいうのはどうやってプログラムを組めばよいのでしょうか…ご存じの方教えてくださいm(__)m
>>116 Windows 2K 以降のシステムに対しては、IShellDetails は IShellFolder2 で置き換えられました、
みたいな意味だから例えば Win98 や NT の頃に出た Shell Namespace Extension の中には、
IShellDetails しか実装していないものもある。
123 :
デフォルトの名無しさん :04/09/24 11:07:15
WM_*の値がいくつであるか、一覧が乗っているサイトが ありましたら、URLを教えてください。 通常は、マジックナンバーは使わないのですが、 メッセージ処理の研究をしていて、来たメッセージのmsg.messageを ウィンドウなどに表示したとき、どのWM_*か知りたいのです。
>>123 WinUser.h見たほうが早いと思うが…。
Spy++じゃダメなの?
127 :
デフォルトの名無しさん :04/09/24 14:51:02
CreateWindowでモーダルを作ろうと思っているのですが、 DS_SYSMODALはどこかのウィンドウの「子」として作らなければ関数失敗しますか? 自分は失敗するのですが。。
128 :
デフォルトの名無しさん :04/09/24 19:41:35
CreateWindowで、自プログラムのメインウィンドウを作る場合、 そのウィンドウの親ウィンドウとして、 GetDesktopWindowで得たウィンドウハンドルを指定するべきなのでしょうか? それとも、NULLを指定するべきでしょうか?
リングレベルを変更するAPIを教えて下さい。
お前ごときに変更されてたまるか。
132 :
デフォルトの名無しさん :04/09/24 20:38:45
終了ボタンを押した時に、GetMessageから出るメッセージを教えてください。 調べてみると、WM_NCLBUTTONDOWNが出ているみたいなのですが、 それはバーとか非クライアント領域で共通のものなので、 他に出ていると思うのですが、分かりませんでした。 WM_CLOSEは、コールバックの方では出ているようなのですが、 GetMessageからは、出ていないようです。
>>131 それぞれ値が全く違うので気になりました。
NULLを指定した場合には、
一体何を親ウィンドウとしているのでしょうか?
NULLは標準的なやり方ではないのですか?
>>133 Spy++でみると、どっちで作ってもオーナーウインドウは(なし)になる。
ちなみに、マルチモニタ(4枚)環境。
>>132 GetMessageからメッセージが出てくる順番は先入れ先出しのキューだから、
即座に反応してほしいメッセージは直接ウィンドウプロシージャへ送られる。
WindowsOSのプロセスは厳密には親子関係にはないそうですが、 子プロセスが先に終了しても全く問題はないということですか?
>>132 アレコレあるけど最終的(の1っ歩前)は、WM_SYSCOMMAND で SC_CLOSE が来てると思うよ。
普通のウィンドウなら。
ファイルの切り取りや貼り付けをする一般的な方法ってどんなものでしょうか? とりあえず思いつくのは、コンテキストメニューを取得して、verbに"cut"や"paste"を指定することなのですが もっと一般的な方法ってないでしょうか? SHFileOperationみたいな物が用意されていそうな雰囲気があるのですが。
>>137 そう。子プロセスが終了するまで親は停止するようなプログラムも作れるし、親が終了しても子はそのまま残るし。
>>141 ゾンビらないのですか?
優秀なOSですね。
ゾンビって終了したにも関わらずそのステータスを誰にも 取得されていないプロセスのことじゃなかったっけ? なんか大きな勘違いしてるカキコを2chでよく見かけるけど。
144 :
デフォルトの名無しさん :04/09/25 09:34:27
あの、マウスのカーソルって条件によって形を変えられるじゃないですか。 例えば場所によって一般的なアローであったり手の形であったり、エディットボックスのときも変わりますよね。 そこでなのですが、自分以外のプログラムによって変わったカーソルの形が画面に表示されるときに 何になっているのかということを取得することってできませんか? また、カーソルの形の画像自体を取得できなくてもある位置からある違った位置にカーソルを動かした時に そのカーソルの画像が変わったかいなかを取得できるだけでもかまいません。 画像判定以外でどうにかならないかと考えております。 お知恵を貸していただける方がいらっしゃいましたらお願いします。
HCURSOR SetCursor(HCURSOR hCursor); の戻り値を保存して 次判定するときに参考にするんじゃだめ?
マナーの悪いプログラム、嫌いです。
147 :
デフォルトの名無しさん :04/09/25 11:21:00
自分で登録したタスクトレイのアイコン上に マウスカーソルが行った事を知るにはどうすればいいんでしょう? WM_MOUSEMOVEだと、どういう条件だかわからんけど がしがし飛んできてるみたいで。。。 WM_MOUSEMOVEでどうにかするものなのかな?
>>147 はぁ?NOTIFYICONDATA.uCallbackMessage
149 :
147 :04/09/25 11:37:42
>>148 言葉足らずですまん
uCallbackMessageで受け取った時のことねん
今もぐぐってるけど、WM_LBUTTONDOWNとかの
クリック系しか無くて、困ってるんです
最後にlparam=WM_MOUSEMOVEがきたときのマウス座標(p1)を 記憶しておいて、タイマーでマウスの座標(p2)を定期的にチェック してp1==p2ならアイコン上、違ったらアイコン外とみなすのはどうかね? 試してないけど。
下げ忘れてた、すまん
>>150 うーむ、こういう案になるのかぁ
入った時と出た時だけ捕まえるとか。。。無理( ・ω・)?
まぁ、もう暫く頭の中で練ってみます
ありがとうです
リスト構造のデータを管理するときは積極的にHeapCreateするべきでしょうか?
>>140 IShellLinkみたいなやつがあった筈。
154 :
デフォルトの名無しさん :04/09/25 18:10:05
Win2KSP4 C++Builder5で ::MessageBeep(MB_OK) とかやっても音が出ないんです 普段操作してる時は音出ます VSは持ってないのでテストできないんですが こういう症状出た事ある人いますか?
他のアプリでメッセージボックスが出る時にも音が出てないのか? 出てなければ環境の問題。 他のが出てておまいのが出ないなんてのはまずあり得ないはず。
ペイントなんかだとダイアログの時音が出るけど ・・・C++Builderで作ってるソフトからだとダイアログの時音が出ない! なんだこりゃ・・・? C++ Builder の環境疑うべきかな?
解決しました TweakUIでサウンド殺してました すんません、ゆるして・゚゚(´□`。)°゚。ワーン
IContextMenuを使ったプログラムを作ると、 Spy++で見るメッセージのネスとレベルがとんでもない勢いで増えていくんですがこんなモンですか? エクスプローラのネストレベルもどんどん増えていくみたいなのですが。
159 :
デフォルトの名無しさん :04/09/25 19:45:02
DialogBoxParamがモーダルになってくれません。 オーナーウィンドウがNULLでもモーダルにする方法はないでしょうか?
>>159 どういう理由でモーダルでないと判断したんだ?
>160 アプリから呼ばれるDLLを開発しており、アプリからDLLを呼んでダイアログを 開いたところ、呼び出し側アプリのウィンドウが操作できてしまう。。。
DialogBoxParam(m_hInstance, MAKEINTRESOURCE(IDD_ReaderSelectDlg), 0, DialogProcEntry, (LPARAM)this); …3番目が0じゃだめなの???
アプリウィンドウをオーナーに出来ない理由があるのか?
アプリウィンドウのハンドルの取得方法がわからないのでNULLを渡しています。 自分(ダイアログ)を開いた親、もしくは アプリのTopLevelウィンドウがわかればいいのだけれど…
普通呼ぶとき渡してもらうだろ
今回作っているものは渡してもらえません(T.T)
>166 最初から設計のやり直し。 はい次の方どうぞ。
ったく2ちゃんねらは役にたたねぇなw
EnumWindowで探すか?
そのあとGetWindowThreadProcessIdかな。 最初からEnumThreadWindowsでもいいかも。
>>171 じゃあ何故オマイラはここにいるのですか?
>>161 システムモーダルにすれば操作できないよ
175 :
sage :04/09/26 01:19:55
あるウィンドウAを親としてWS_CHILDスタイルを指定しないでウィンドウBを作ったとき Bから見たAをオーナーウィンドウ、、というんですよね。違ってるでしょうか。 GetWindowでGW_OWNERを指定した場合は必要なAのハンドルが得られるのですがGetParentを使用した場合に関数が失敗します。 (GetParent) 「指定したウィンドウがトップレベルウィンドウの場合は、オーナーウィンドウのハンドルが返ります。指定したウィンドウが トップレベルのオーナーを持たないウィンドウだった場合、および関数が失敗した場合は NULL が返ります。」 GetParentでオーナーを取得できているのにGetParentでオーナーが存在していないという事になっている(?)のは何故なのでしょうか。 間違い指摘してくださいお願いします。
>>175 とりあえずGetLastError()してみては
ドキュメントの間違い。ずっと前から。
プロセスの親子関係が曖昧なんだから、 ウィンドウの親子関係くらいはシンプルでハッキリと作ったらいいのに。
はっきりしてるよ。親子関係と所有関係を混同してる人が多いだけで。 GetParent() はオーナーを返さないのも名前からいって妥当だと思うけどね。
すっげー、このヒト。名前だけでAPIの全貌つかんじゃってるよ。 当然とか言い切っちゃってるし。 >The GetParent function retrieves a handle to the specified window's parent or owner. >指定された子ウィンドウの親ウィンドウまたはオーナーウィンドウのハンドルを返します。
sageを今やっと理解しました175です。ありがとうございます。
>>176 さん
使った事がない関数なので調べて見ます。
今時間がないので試せませんが、夜試してみようと思います。
>>177 さん
あ、MSDNの文書自体が間違っているということですか??
考えもしませんでした。そういえば日本語のMSDNは誤植が多いって誰かが・・。
英語も勉強しなくては
>>178 さん
僕も自分が親とオーナーのをちゃんと識別できているかどうかすらわかってない感じです。
子は親の領域内に表示されるウィンドウ、オーナーに所有されたウィンドウというのは
オーナーが閉じられたときに自身も閉じられてしまうようなウィンドウ、あとは上に書いたことをつけたしたような認識です。
>>179 さん
やっぱりMSDNが誤植でGetParentはオーナーを返さないんですね。
自分も親子関係と所有関係の違いをよくわかっておりません。
「オーナーウィンドウ 親ウィンドウ 違い」でググって解説は見つけたのですが、
特にオーナーについて具体的に何を指しているのかわかりませんでした。
教えてください、お願いします。
ありがとうございました。
184 :
144 :04/09/26 13:40:05
GetCursor()で取得しようとしたんですがカーソルが矢印でもハンドでも 同じ値しか返してくれません一体どうすればいいんでしょうか・・・P_q
>>184 最終手段だけど、APIフックでSetCursor()をフックしちゃえば?
x64コンパイラを含んだPlatform SDKを入手したいのですが、 どうやったら入手できますか? MSDN以外にも、betaplaceから入手できるとCマガジンに書いて あったのですが、Guest IDを聞かれるだけで、メールなども来ていません。
>>180 さん
あれ。
>The GetParent function retrieves a handle to the specified window's parent or owner.
>指定された子ウィンドウの親ウィンドウまたはオーナーウィンドウのハンドルを返します。
MSDNの内容は誤植じゃないって事でしょうか?
GetLastErrorをGetParentの直後に使ってみました。関数はハンドルを返しませんが(関数失敗?)
LastErrorの戻り値をデバッグモードで調べると0になっていました。
0のエラーコードは「正常に終了している」とどこかの掲示板のログにありましたし
MSDNのFormatMessageのサンプルコードをほぼ完全にコピペしてエラーメッセージを表示しましたが
やはり、「操作を正しく完了しています」的なメッセージでした。
ダラダラごめんなさい。GetParentはオーナーは返さないという結論でいいのでしょうか?
> GetParentはオーナーは返さないという結論 すくなくとも Windows95,2000 では、返しませんね。 古い Win32API のヘルプでは The GetParent function retrieves the handle of the specified child window's parent window. となっていて、オーナーのハンドルを取得できるとは書いていない。いつからか、取得できる という事になっているが、自分は成功したことはありません。 GetWindow() か、WS_CHILD スタイルが無いことを確認してから GetWindowsLong() では 取得できますね。
190 :
デフォルトの名無しさん :04/09/27 00:08:44
CreateFileの第六引数・ファイル属性のFILE_ATTRIBUTE_ENCRYPTEDの説明に このファイルまたはディレクトリを暗号化するよう指示します。 とありますけど、実際にはどうなるんですかね?このフラグでファイルに数値入れたりしても 特に何も変わってないようにみえるんですけど
CreateFileしたユーザ自身が見たら、暗号化されて見えなくてなくて当たり前だと思うが。
>>190 調べてないけど、FATとNTFSでは挙動が違うんでないかい?
FATでそんなめんどくさいことサポートしてないでしょ。
スレッドがサスペンド状態かどうかを知る方法はあるのでしょうか。 たとえばVCLのTThreadクラスでは、Suspendedプロパティを設定してから 実際にサスペンドさせるので、スレッド自身がサスペンドする場合には このプロパティは厳密にはあてにはならないと思います。 スレッドハンドルは終了しないとシグナル状態にならないようだし、 何か方法はないものでしょうか。
>>182 WS_POPUPの場合、GetParent()はオーナーを返す。
>>193 VCLって何?
というか、サスペンド状態ってあんまり使わんと思うんだが
(通常はイベント待ちになってるっしょ)
汎用の何かを作るの?
>>195 193じゃないけど、VCL = Visual Component Library の略で
Delphi、C++Builder で使われてるクラスライブラリ
>>193 WaitForSingleObject
198 :
デフォルトの名無しさん :04/09/27 02:25:57
>>193 SuspendThreadして戻り値見るとか?
>>195 VCL知らんっすか。まァそうかもしれませぬな。
>>196 さん、さんくすっす。
あんまりスレッドを作ったり終了したりすると原因不明のメモリリークがあるとか
聞くし(真偽は不明)、どうせ必要なスレッドならサスペンドで待機させといて
必要なデータを設定→Resumeの方が効率いいかなー、とオモテそんな仕組みを
考えております。
>>197 なんのハンドルを?サスペンドでもシグナル状態になるの?
>>198 考えましたけど、一瞬でもスレッドの動作を阻害するのでやだなあと。
でも一応案のひとつです。
>>190 ファイルを暗号化するには専用のAPIを使う必要がある
暗号化属性ビットを直接いじっても駄目
なんだDel厨か…
>>193 待機させるならCreateEventのハンドルとかでイベント待ちする方が賢いと思うけど。
SuspendThreadはワーカスレッド側の都合に関係なく止まるから普通は使わないよ。
質問です。 複数のアイコンを1つのファイルにまとめるためにdllを作るというのはありですか? 試してみたところ、dllはソースファイルに何も書かなくてもビルドできるようなので 正直驚いているところです。 正しいアイコン書庫ファイルの作り方は何なのでしょうか?
>>203 WinAPIで取り出せるからdllでいいと思うけど。
>>205 情報有難うございました。
リンクページによると、dllはある種のアイコン書庫ファイル扱いされてるみたいですね。
.iclファイルという専用のフォーマットがあることは全く知りませんでした。
勉強になりました、サンクスです。ノシ
ちなみに自分がVC6SP4で生成したソースなしdllでのサイズについて触れますと、
2,238[Byte] × 219個 を組み込んだ状態で、557,056Byteのdllファイルとなったので、
オーバーヘッドは、557,056-490,122 = 66,934[Byte]でした。
おーい、ICLは専用フォーマットじゃないよ。 アイコンしか入っていないDLLを、それとわかるように拡張子変えてるだけ。
ListViewコントロールのスクロールバー位置についての質問です。 垂直スクロールバーが一番下に来ているかどうか知りたいのですが以下のようなコードで問題ないのでしょうか? nPos+nPageがnMaxより1大きいのが気になるのですが‥‥ ::SCROLLINFO si; si.cbSize = sizeof(si); si.fMask = SIF_ALL; //SIF_POS | SIF_RANGE; ::GetScrollInfo(hWnd, SB_VERT, &si); if ((si.nPos + si.nPage - 1) == si.nMax) //要スクロール else //スクロール不要
>>206 リンカの/NOENTRYでもう少しサイズは小さくならないか?
210 :
デフォルトの名無しさん :04/09/27 17:39:00
Windows であるディレクトリ以下のファイルのコピー,移動,削除などを 監視したいんだが, FindFirstChangeNotification を使えば,それが起きたことを教えてくれるが, なんていうファイルのどうしたのか(コピー? 移動? 削除?)は これじゃわからん. これを知る方法ない?
>>210 NTならそういうAPIが使えるが、そうでないなら自分でリストアップするしかない。
と記憶してる。
212 :
210 :04/09/27 18:10:01
リストアップっていうのは? どうやんの?
>>212 変更前にファイルリストを作っておいて変更後と比較する
214 :
デフォルトの名無しさん :04/09/27 18:21:31
>>213 常駐して,アクション(ファイル操作)が起こりしだい
リアルタイムで知りたいんだけど,
その方法じゃ無理やんけ
アクションが起きるたびにファイルリストを随時更新するんだよ
さよか。
217 :
210 :04/09/27 18:32:07
>>215 1つのドライブぜんぶ監視したいんだが,
そんなことやってられっか
いくらメモリくうかわからんし,
CPU もおおいそがしだよ
そうですか
219 :
210 :04/09/27 18:34:57
誰かいい知恵だせよ
さいな
ファイルI/OのAPIをフックすればできるけど、特殊なAPIの呼び出しかたしてたり 圧縮・暗号化されてる実効ファイルとかだとちょっと面倒。
>>210 NT系でいいんなら ReadDirectoryChangesW を非同期で使えば?
つーか210では「あるディレクトリ」とか言ってるのに 「1つのドライブぜんぶ」とかいきなり前提条件変えるし
もう相手すんなよ。
(´,_ゝ`)プッ しょせんここのレベルはこの程度だよ
227 :
210 :04/09/27 20:02:18
あなたたちには、失望したわ。
228 :
210 :04/09/27 20:08:47
自己解決したので、もう来ません。
何事もなかったかのように次の人どうぞ↓
>>223 に答え教えてもらっておいて「自己解決」か。
プッ
>>202 もちろん、ワーカスレッドの都合を無視して無理やりサスペンドさせるような
作りにはしていません。
おっしゃるとおりに今までイベントオブジェクトで連携を取っていたんですが、
ワーカスレッドが自発的に停止する場合に問題だったのです。
スレ違い気味になるので詳しくは書きませんが、別のアプローチで解決しそうです。
詳しく書け
SHChangeNotifyRegister() は9xでも隠しAPIとして存在しているはず。
>>233 SHChangeNotifyRegisterはアテにならない。
>>235 それは当然。ソフトウェア的に実現しているに過ぎないからね。
SHChangeNotify() をちゃんと呼んでくれるプログラムしか対応できない。
エクスプローラでの操作が反映される程度だろう。
9x でリアルタイムに反映させようと思ったら、ドライバ書くしかないんじゃないか?
237 :
デフォルトの名無しさん :04/09/28 00:06:07
分割ウィンドウを作ろうと思ってがんばってるんですが、どうしても みてくれが悪くなります。 MFCのCSplitterWndと同様の効果を得られるようにするにはどのように すればよろしいのでしょうか?
MFCと同じように書く
>>189 さん
遅れてすいません。
なるほど!詳しくどうもありがとうございました!
これでスッキリ寝れます。
みなさんどうもありがとうございました。
240 :
デフォルトの名無しさん :04/09/28 01:52:49
別スレで同じことを書きましたがスレ違いだったみたいなので こちらで質問します。 MCIで動画を再生するプログラムを作っているのですが MCIWndCreateでWS_CHILDを指定して再生させています。 ですがこのままだと再描画がされません。 親のウィンドウにはWM_PAINTが来るのですが、 どのように再描画させれば良いかが不明です。 どなたかご存知ないですか?
242 :
デフォルトの名無しさん :04/09/28 22:04:17
NamedPipeなんですけどクライアント側でWaitNamedPipeを使って待つようにしてます。 ほぼ同時刻にクライアント側から書き込もうとすると1つはタイムアウトでエラーになります。 サーバー側でのインスタンスの数は1つでも制限なしでも変わらす。 同時刻に接続に行って両方とも読むいい方法は無いですか?
243 :
デフォルトの名無しさん :04/09/28 23:37:08
設定の保存にレジストリを使いたいんですが、レジストリに書き込むにはどうしたらいいんでしょうか。 HKEY_CURRENT_USER\SOFTWARE\Microsoft\sample (仮)に 名前 Height 値 200 という感じで記録したいんです。
>>243 自分で調べてみてそれが分からない程度ならばプログラムをやめろ
245 :
デフォルトの名無しさん :04/09/28 23:58:00
>>243 RegSetValueEx
これでわからなければ残念だが 244 の言うとおり
チェックボックスを縦一列にびっしり並べたいのですが、 一つ一つの縦幅の値をどのようにして決定したらよいかわかりません。 WM_CTLCOLORBTNでデバイスコンテキストを受け取れば、 GetTextMetricsで文字の高さを得て近い事はできるかなあと思いましたが もっと綺麗な方法があるかなと思って質問させていただきました。 よろしくおねがいします。
プリンタなどの特殊なDC以外では、文字列の高さはフォントで決まる。どこでもいいから スクリーン関係のHDCを取得して、使用するフォントで高さを一回求めればいい。 GetDC(0) でもいいんじゃないの、たぶん。
醜悪なインターフェイスの典型
統一されたインターフェイスの典型
250 :
デフォルトの名無しさん :04/09/29 11:12:29
TrueTypeフォントデータからLineTo,MoveToで描画可能な線情報を 抽出したいのですが、何かいい方法はないでしょうか? 【現在のロジック】 DIBに文字を描画 → 輪郭だけのビットマップ画像(袋文字状態)を作成 → ビットマップの輪郭を一筆書き線の情報に変換 一筆書き線の情報をLineTo,MoveTo描画すると元の文字の輪郭らしきものにはなるが 美しくない。 TrueTypeフォントデータから直接LineTo,MoveTo座標を抽出する方法があればベストです。 どなたか知ってらっしゃる方がいればよろしくお願いいたします。
GetGlyphOutline 曲線データだけどね。
>>250 ベジェ曲線かBスプライン曲線について学んだ後の
方がいいと思うよ
ファイルのマッピング管理をOSに任せる為に、 メモリマップドファイルを使っています。 この時、メモリへの書き込みに応じて 自動的にファイルサイズを拡張するにはどうしたらいいでしょうか。 試しにCreateFileMappingにmaximumSizeを与えてみたところ、 メモリにアクセスしなくてもmaximumSizeのサイズでファイルが作成されるようです。 OSがページフォルトを検出して勝手に拡張してくれると非常に楽なのですが、 不可能であれば代替策を教えていただけると助かります。
>>253 不可能です。代替策もありません。
一度マッピングを破棄して、再度マップしなおす他に方法はありません。
実装方針を見直すしかないと思います。
>>254 ということは、自分でキャパシティを設けて、アクセスの度にチェック、
キャパシティを超えていたらコミット、というコードを書くのと大差ないわけですね。
あ、でも基本的に読み書きがランダムだから、
必要な部分だけファイルから読み出したり書き出したりするよりかは
再マップした方がいいのかもしれません。
やりたい事はバーチャルなファイルシステムに類するような事なのですが。
>>255 class CFileMap : {
public:
void* Map(fpos_t start, size_t length);
void* MapNext(size_t length);
};
みたいなクラスで適当に大き目のサイズだけマップしつつ必要に応じて再マップってのが
良いような気がします。ReadしてWriteするよりかは性能でると思う。
扱うデータが動画等の巨大なものでなければ、処理中はすべてオンメモリで処理するコードでも
良いような気もしますけど、それではまずそうですか?
>>256 にゃるほど。
> 処理中はすべてオンメモリ
それはマッピングせずにということですか?
それだと初回の読み出しに全て読み出さなきゃいけないので無駄が多いと思うのですが、
イマイチ理解出来ていなそうなので解説お願いします。
>>258 Guard Pageって面白いですね。
フォルト検出に近い事が自分で出来るのか。
でも毎回テストしなくてはいけないという点でやはり不便ですね。
かといって、毎回再マップしてると開放の度に強制的なコミットで重たそうな気もします。
テストしてみないとなんとも言えませんが。
Shellプログラミングについての日本語本てある? ShellってIShellFolderとかね。
>>259 毎回テストする必要はないんでない?
ガードページを読み書きすると、SEH が投げられるので、SEH のハンド
ラでガードを解除してファイルをロードして、SEHが投げられたところ
から実行を続行すればいいような。
親が使っているノートパソコンにはマウスを付けているんですが、キーボード手前の ポインタを動かせる装置が誤動作をするらしくて、勝手にマウスポインタが動いたり、 クリックされたりするらしいのです。 それでどうにかしろと言われたのでマウスのクリック(できれば移動も)を封じることに しようと思うのですが、この場合はSetWindowsHookExを使うという方向でよいでしょうか?
>>262 素直にタッチパッドの禁止をして置け。
・メーカのサポートデスク
・取り説
・オンラインヘルプ
のどれかでそのやり方がわかるだろ。
>>263 さっきまで練習にちょうどいいやって思ってやってましたが、技量が足りないような
気がしてきました。やっぱそちらの手段をとるべきですね。
ただ、そのノートはPentiumの233とかいう古いもので、しかも一月くらいに知り合いから
三万か五万で買ったものらしいです。
とりあえず明日にでもサポートに電話してみようと思います。
板違いになりますのでここらで失礼します。レスありがとうございました。
Pentium233 noteで3〜5万は高いな…
Windows 2000で CreateToolhelp23Snapshot(TH32CS_SNAPMODULE,PID) にいったきり、戻ってこない場合があるのですが 回避方法とかないでしょうか?
23 じゃだめだろ、32 では? っていうボケはともかく Win2k なら PSAPI を使った方がいいよ
API学ぶのに一番適した参考書は何?
msdン
>>261 そうですね。勘違いでした。
ひとまず頑張ってみます。ありがとうございました。
WinBugsに書いてあったのをコピペしたので、23になっていました。すみません。
PSAPI使うしかないんですかね?
kernelに実装されているので、動かないことがあるのが
なんとなく悔しくて質問してしまいました。
ありがとうございました。
>>267
>>247 ディスプレイのDCなら、どのウィンドウで取得したものでも
フォントの高さは同じなんですね。わかりました。ありがとうございました。
レス遅れてすいません。
ただいま。 今試してみたのですが、サイズを文字の高さであるして並べると 押してみるとわかるのですが微妙に重なってました。 このコントロールをきちんと丁度表示でき、それでいて余らないサイズを 知る方法はありますか?おしえてくださいお願いします。
>>273 ボックス部分やテキスト部分をどのくらいの大きさで描画するかは
チェックボックスの勝手だろうから決められないんじゃない?
将来のOSでまたデザインが変わるかもしれないよ。
もしも使う環境を限定していいんだったら、
フォントの高さにどれくらい加えればちょうどいいかを
実際に測って決め打ちしちゃえば?
275 :
246 :04/09/30 23:07:29
あぁ、これと限定できない問題ってことですね。 そうなるとフォントの高さにこれくらいなら大丈夫だろうという 値を加えて作るくらいしかないのですかね どうもありがとうございました
単に GetWindowRect() では駄目なの?
oioi
278 :
デフォルトの名無しさん :04/10/01 20:47:03
レッドカード?
そのGetするRectはWhoがSetするのだ?
Checkbox の高さは 8 Dialog Units。 スクリーン座標系に変換するには、適切なフォントが設定されたウィンドウでMapDialogRectを使う。 でよかったと思うけど。 ちなみに1行分の EDIT は 12 Dialog Units。
>>280 そういったコントロールメトリクスの一覧とかって
どこかにまとめられていますか?
>>280 それってGetDialogBaseUnitsが元になってない?←MSDNにはそこまで書いていない
全く高さが合わないんすけど。
俺の指定したDLGTEMPLATEの中身がおかしいのかな?
一応指定したフォントでSET_FONTが各コントロールに送られているのだけれども。
あ。勘違いでした 忘れてくださいぃぃぃ
284 :
デフォルトの名無しさん :04/10/02 00:15:38
別にイイジャン、それもひとつの解決方法。 俺がユーザーだったら文句言うけどw
285 :
デフォルトの名無しさん :04/10/02 09:46:16
WindowsのAPIでしりとりしよう!
いくぞ! SetWindowRegion()
別スレ立てた方がいいかな、これ
>>286 否、ChangeServiceConfig2
間違えて書き込んでしまった…
あのぉ、gdi.dllとかのソースはどこかで見れないんでちゅかあ?
プログラマなら機械語ぐらい嫁
リバースエンジニアリングでタイーホ
別スレッドからSendMessageしたところ 送られたスレッドが送り元スレッドでEnterされたクリティカルセクションの開放を待っていて 両スレッドだんまりになってしまいました。 PostMessageなら大丈夫ということで、 送りたかったメッセージWM_SETTEXTをpostしたのですがどうやら無視されてしまいます。 WM_SETTEXTはpostできないのでしょうか?
>>295 MSDNでPostMessageの説明嫁。
> 非同期メッセージ関数(PostMessage、SendNotifyMessage、
> SendMessageCallback の各関数)を使って、WM_USER 未満の
> メッセージ(メッセージの値が 0x8000 未満)を送信する場合は、
> メッセージのパラメータでポインタを使うことはできません。
無視される理由がここにあるのかは別の問題だけど。
SetSystemPowerStateで休止状態、或いはサスペンドにした後、 ある時刻に自動復帰するようににはどのようにすればいいのでしょうか?
>>296 メッセージループは止めないようにしてSendMessageに変えました
300 :
デフォルトの名無しさん :04/10/03 21:04:07
>>296 変な説明だな
動的に割り当てたメモリへのポインタも渡せない、と聞こえる
SendMessageとSendNotifyMessageの違いって何? もしかしてWM_NOTIFYって、SendNotifyMessageでしか送っちゃいけない?
SendNotifyMessageは別スレッドにMessageを送るとすぐに制御が返る。
>>302 つまりSendMessageとPostMessageの中間ってことかしら。
クールバーにメニューバーを入れることって出来るんですか?
メニューバーを移動したいと思うユーザーがどれほどいるでしょうか
答えられないので論点をずらして逃げようとしてる人がいますね
>>308 ありがとうございます。
「猫でも〜」に紹介されていたんですか、気が付きませんでした。
>>306 痛い所を突いてきますね・・・
ちょっとした画像処理ツールを作ろうと思ってWin32APIをいじくってるんですが、
ウィンドウのデザインばかりが気になってちっとも本題に入ることができません。
IEがこんなデザインにしたから気になるんですよ。
IEのバカッ!(><)
IEやOfficeみたいなUIにしてくれっていうユーザも結構いるんだよね
↑ウィルス
通報しますた
binutilsにあるreadelfみたいにPEオブジェクトファイルの 構造を分りやすい形で表示してくれるツールとかありますか? MS純正のものでもなくてもいいです。フリーのツールでも。
PEオブジェクトファイルの 構造を分りやすい形で 解説してくれたら作りますよ。
自己レスです。 >link /dump /all hello.obj これで見れました。
>>282 GetDialogBaseUnit は、ウィンドウやフォント等指定する引数もなく常にシステムフォントの
メトリクスをもとにした値を返します。んで使い物にならない。MapDialogRectがお勧め。
もう解決したみたいだけど、読んでる人向けに補足ですた。
>>309 ちょっとした物作るんでGUIはちまちまいじりたいんならVBやDelphiみたいな
RADツール使うといいんじゃないか?すくなくともDelphiならマウスでぽちぽち
配置していくつかプロパティいじればできたと思う。
全部RADでやってもいいし、コアはC++でやってもいい。
突然質問で失礼します。 CDialogの継承クラスにおいて ワーカスレッドからメインスレッドに15msecおきに SendNotifyでユーザ定義メッセージを送って 関数を実行させようとしています しかし、どうしてもランダムに 200msec前後の遅延が発生します どうにか15msecぐらい間隔で目的の関数を 呼び出すことはできないでしょうか? どうか、アドバイスをよろしくお願いします
ウィンドウメッセージを使ってその精度が維持できると思っているのが間違い。 timeSetEvent() でもつかったら?
初心者の質問に答えていただきあいがとうございました。
モードレスで作成したプロパティシート(ページではない)を削除する 方法ってどうしたらいいのでしょう? モードレスにしたプロパティシートのハンドルを引数にして DestroyWindowでおこなうとWindows APIバイブル2のサンプルCD (CHAPTER4のGETTABCT.MAK)ではなっているのですが、VC.NET2002 でおこなうと、終了処理の後にハングしてしまいます。 宜しくお願いします。
324 :
デフォルトの名無しさん :04/10/05 09:22:47
ReadDirectoryChangesW を使って, 全ドライブのファイル操作の監視をしたい. CreateFile で監視するディレクトリィのハンドルをとって, わたしてやるんだが,例えば,cドライブを見たければ, "c:\\" とか指定すればいいんだが, 全ドライブを指定することはできないだろうか? GetLogicalDriveStrings で生きてるドライブ名をとって, 個別にそれぞれ CreateFile で開いて, ReadDirectoryChangesW で監視するってのは あほらしくてやってられない. 一発でできないだろうか?
325 :
デフォルトの名無しさん :04/10/05 13:12:49
休止状態から指定時刻に復帰するプログラムを作りたいのですが、どのAPIを使用すれば良いのでしょうか? アドバイスお願いします。
>>324 盲目的に全ドライブ監視は危険。メディアの入れ替えで恐ろしいことが起こる。
やるなら個別でやるべき。
327 :
デフォルトの名無しさん :04/10/05 15:07:05
他のアプリが最大化しているか、などの状態を取得するAPIありますか。
>>324 漏れの6連装CDドライブをガチャガチャ言わすのはオマエか!
>>327 ウィンドウを列挙して、ウィンドウが最大化しているかどうか調べれば良いかと
ありがとうございます。 列挙と言うとEnumWindowとかですか? 具体的なキーワードを頂けるとありがたいです。
331 :
デフォルトの名無しさん :04/10/05 16:11:16
半角を全角にするAPIはありませんか?
332 :
デフォルトの名無しさん :04/10/05 16:25:54
void replace(char* text,char* key,char* rep) { char *p,buf[256]; p = strstr(text,key); while(p!=NULL){ *p='\0'; strcpy(buf,p+strlen(key)); strcat(text,rep); strcat(text,buf); p = strstr(p+strlen(rep),key); } } [使い方] replace(buf,"ア","ア"); replace(buf,"イ","イ"); replace(buf,"ウ","ウ"); replace(buf,"エ","エ"); replace(buf,"オ","オ"); replace(buf,"カ","カ"); replace(buf,"キ","キ"); replace(buf,"ク","ク"); replace(buf,"ケ","ケ"); replace(buf,"コ","コ"); replace(buf,"サ","サ");
>>327 IsZoomed
IsIconic
GetWindowPlacement
>>321 マルチメディアタイマを使ってみたのですが
10000回に1度くらいの割合で
イベント10回くらいをスルーしちゃって
コールバック関数内で呼び出してある関数が
実行されてないようです
どうしてでしょう?
コールバック関数内の処理を軽くしても
改善されませんでした
原因に心当たりのある方
是非アドバイスをよろしくお願いします
実行されていないようです
俺を最強のプログラマにするAPIはありませんか?
TerminateProcess(
>>338 , 0)
>>337 必ずコールバックされると思っているのが間違い。
コールバック関数の中で前回呼ばれた時のシステム時間との時間差を計算して、
呼ばれなかった分の穴埋めを行う処理をしないといけない。
341 :
デフォルトの名無しさん :04/10/05 21:33:20
ウィンドウの枠の上下左右の一箇所だけ枠なしとかにすることはできる でしょうか?
SetRegion とか LayeredWindow とかを使うとできるよ。
>>341 WM_NCHITTEST と WM_NCCALCRECT と WM_NCPAINT と WM_NCACTIVE あたりを
自前で実装すれば可能。
>>337 1.コールバック関数から SendNotifyMessage を呼んでいる時、メインスレッドで
直前のメッセージ処理が終わるまで待っている状態。
メッセージを使わないようにする。
表示の更新だけなら InvalidateRect のみとか、
直接 dc 取得してワーカースレッドから描いてしまうとか。
2.GDI に対して描画要求を過剰に繰り返し行うと起こる現象。
描画部分を小さくしたり、DrawDibDraw とか DirectDraw を使えば良くなるかも。
>>340 コールバック関数内にグローバル変数の
イベント発生カウンタを持っているのですが
そのカウンタとコールバック関数内の
一部の関数が走った回数が一致しません
イベントカウンタの方が大きい値になります
従って、コールバック関数は呼ばれているのですが
その中の関数が走ってないように見えます
どうしてでしょうか?
>>345 ファイルIOはそれなりに高速なので、ログでも書き出して動作を検証すべき。
あとコールバック処理中に再びコールバックが呼ばれるケースとかも考慮するべき。
349 :
デフォルトの名無しさん :04/10/06 10:04:35
VS.NETで作成できるWindowsインストーラーでサイレントインストール時に インストール先をiniファイルなどやオプションなどに記述して 変更する方法はないものでしょうか。 宜しくお願いいたします。
微妙にすれ違い
IMEが変換を確定したタイミングはどうやって知る事ができますか
>>351 WM_IME_COMPOSITION とかでどう?
354 :
デフォルトの名無しさん :04/10/07 02:52:23
「未解決の外部シンボル "int __cdecl InitInstance(struct HINSTANCE__ *,int)" (?InitInstance@@YAHPAUHINSTANCE__@@H@Z) が関数 _WinMain@16 で参照されました。」 というエラーが出るのですが、何をリンクすればこのエラーがなくなるのでしょうか? #includeしているのは #include <windows.h> #include <windowsx.h> #include <winsock2.h> #include <stdlib.h> #include "resource.h" なのですが、、、このエラーだけはどうすれば回避できるのか わかる方がいましたら教えてください。
356 :
デフォルトの名無しさん :04/10/07 09:30:19
Win32 API の CreateThread を使うときに, 実際スレッドで動かす函数として ある特定の型の函数への指示子をわたしてやるんだが, この函数って大局じゃないとうまく動かない. 類の要員函数ではいけないの?
氏ね
>>354 恐らくなにかのサンプルをコンパイルしようとしてるかどっかからのコピペ
コードなんだと思うけどInitInstanceは普通自分で定義するんじゃないか?
ソース全部見ないと正確にはわかりません。
>>356 クラスメンバなら大丈夫。そうじゃないときは暗黙のうちにthisがわたされる
から無理。4番目のパラメータにthisわたしてクラスメンバからメンバ関数を
呼び出せばいいと思う。
359 :
デフォルトの名無しさん :04/10/07 09:51:58
>>354 InitInstance というと AppWizard が自動生成するスケルトンに入っている関数か?
CreateThread に渡そうとして引数を変えたのにプロトタイプを直し忘れたとか、そーゆーオチか?
354です。MAPI.Libをリンクするとそのエラーはなくなりましたが、 C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\lib\MAPI.Lib : fatal error LNK1136: ファイルが無効であるか、 または壊れています。 というエラーが出て結局ビルドできません。
>>360 単に、別のリンクエラーが出て、そこで止まっただけ
362 :
デフォルトの名無しさん :04/10/07 10:32:08
>>360 関係なさそうだな
そんなとこに InitInstance なんてねえもん
363 :
デフォルトの名無しさん :04/10/07 15:35:15
該当スレが分からなかったので、ここで質問させてください。 すでに起動しているWindwosMediaPlayerを 外部からメッセージを送って操作する方法はありますか? 具体的には、あるタイミングで、WMPですでに選択されている ファイルの再生をスタートさせるだけです。 よろしくお願いします。
364 :
デフォルトの名無しさん :04/10/07 15:42:45
WindowsサービスからユーザがWindowsにログオン/ログオフするのを検知したいんだけど、 どうしたらいいんでしょうか? とりあえずイベントログを定期的にチェックして検知とか考えました。 そんなめんどくさいことしないでもイベント通知してもらえたりするんでしょうか? GINA使わないでやりたいです。 よろしくお願いします。
365 :
デフォルトの名無しさん :04/10/07 16:47:53
函数と書きたいだけの厨房発見
厨房と書きたいだけの(rya (ryaと書きたいだけの と書きたいだけの
>>354 InitInstance は Windows API ではないので、中身は自分で書きましょう。
ウィンドウクラスの登録用に、習慣的にその名前を使っていただけ。
>>363 WM_COMMAND送りつければいいんじゃ?
>>363 MicrosoftR Windows Media? Player 7 SDK
Windows Media Player コントロール Version 6.4
ただし VBアプリから起動させる場合
>>354 int WNAPI WinMain(〜)
が書いてある行より手前に
int InitInstance(HINSTANCE, int);
と書いてみろ。
371 :
デフォルトの名無しさん :04/10/07 23:01:34
WNAPI
GUIDを文字列にしてくれるAPIはありませんか? 自分で作ってもいいのですが、標準で用意されているような気がしてなりません。
StringFromGUID2
猫でもわかるの122章のプログラムを実行したのですが、次のような問題が発生します。 ・DLLのロードに失敗する。 ・hMyLibをstaticにしないと強制終了する。 ・WM_PAINTメッセージが複数回ディスパッチされる。 元のソースコードは、構文的に間違っていないと思います。 対処法が全く分からず、困っています。どうすれば良いのでしょうか? OSはWinXPHome、コンパイラはBCCを使用しています。
リストビューについて質問です。 カラムの挿入でiColに好きな値を設定できないようなのです。 iOrderで順番も入れ替わるし、iColとサブアイテム番号の対応は自分で管理しないといけないのでしょうか?
>>374 もうちょっと詳細に教えてくれ。
>・DLLのロードに失敗する。
LoadLibraryの後でGetLastErrorを呼んでエラーコードを調べる。
>・hMyLibをstaticにしないと強制終了する。
できればどの行で強制終了するのかデバッガ(BCCじゃ無理か?)で調べる。
>・WM_PAINTメッセージが複数回ディスパッチされる。
これは多分仕様。(違うかも)
>>376 エラーコードを調べようとして、次のようにソースコードを書き換えたのですが、強制終了します。
case WM_PAINT:
hMyLib = LoadLibrary( "dll04.DLL");
wsprintf(str,"%d",GetLastError());
MessageBox(hWnd,str,"",MB_OK);
書き方に問題があれば、指摘して下さい。(^_^;)
MessageBox(NULL,"","",MB_OK);をWM_PAINTメッセージの処理部分の所々に挿入しながら検証していたのですが、
コンパイルを繰り返す内に、メッセージボックスが表示されなくなり、強制終了するようになりました。
最初は、画面の右下の方に表示されていました。中央に表示されないのが変だと思っていたのですが...。
また、メッセージボックスが表示される時に鳴る警告音が立て続けに20回くらい鳴ります。
そのため、WM_PAINTメッセージが複数回ディスパッチされていると判断しました。
>>378 実行ファイルと同じ場所に置いてあるので、問題ないと思うのですが...。
>>379 WM_PAINTハンドラ→MessageBox→モーダルループ→無効領域がクリアされてない→WM_PAINT発生→WM_PAINTハンドラ→・・・
で無限ループに陥ってるかも。
それはWM_PAINT処理にMessageBoxなんか入れたことが原因だろ。
>>380 >>381 >>382 ありがとうございます。Turbo Debuggerをインストールしているのですが、使い方が分からないので困っていました。(^_^;)
紹介して頂いたデバッガを利用してみたいと思います。
>>383 勘違いされてるような気がしないでもないので、
補足しておくと、
OuputDebugStringは文字列をデバッグ出力に送るAPI
リンク先のは、OuputDebugStringの出力を表示するツール
ちゃんとしたデバッガを使ってるなら、
それの使い方を覚えた方がいいと思われ
>>384 いろいろ教えて頂きありがとうございます。Windowsプログラミングで簡単に文字列を出力する方法を知らなかったので、
仕方なくMessageBox関数を使用していました。OuputDebugString関数を使えば良いのですね。
>>379 無限ループになるのは当然ですね。つまらないミスでした。反省しています。(^_^;)
>>376 GetLastError関数の戻り値は0でした。やはり、DLLのロードに失敗しているようです。
>
>>379 > 無限ループになるのは当然ですね。つまらないミスでした。反省しています。(^_^;)
すみません、リンク先を間違えました。
>>379 ではなく
>>380 です。(^_^;)
MessageBoxをループ内に配置するとエライ事になる。 ループ離脱条件を戻り値IDOK以外にしていたとする。 DestoryWindow()が親に送られたら地獄。 応答不能・シャットダウン不能となる。 DestoryWindow()APIがダイアログをIDOKで閉じるからである。 戻り値でループ離脱をする場合、十分注意しよう。
389 :
デフォルトの名無しさん :04/10/08 15:57:57
質問です。 階層構造が複雑で、子孫ウインドウが多数存在するトップレベルウィンドウがあります。 ウィンドウを非アクティブからアクティブにしたときに、そのウィンドウが 非アクティブになる前に持っていたキーボードフォーカスの位置を元に戻したいのですが、 WM_ACTIVATE(WA_INACTIVE) が送られてくるタイミングで GetFocus() してフォーカスを保存しようとしても、 ウィンドウを最小化したときなどはすでにフォーカスが失われているらしく、うまくいきません。 現在はすべてのウィンドウプロシージャで子ウィンドウのフォーカスの移動を監視し、それを 親ウィンドウに次々と通知することで実現しているのですが、あまりスマートとはいえません。 もし、もっとウマーな方法があればご教示ください。
>>388 すみません、勘違いしていました。発言を撤回します。(^_^;)
>>384 OuputDebugString関数を使用してみたのですが、
"未定義の関数 'OuputDebugString' を呼び出した"
というエラーメッセージが表示されます。windows.hはインクルードしてあるのですが、
別のヘッダファイルをインクルードする必要があるのでしょうか?
OutputDebugStringだろ。
漏れがタイポしたもより・・・欝だ詩嚢
>>390 つーかこういう時ってまずタイポ疑えよ。
エラー起こるたびに訊いてるようじゃ進歩ねーぞ。
>>392 >>384 のレスの関数名をそのまま使用していたので、スペルのミスに気が付きませんでした。
指摘して頂いてありがとうございます。(^_^;)
っていうか、BCCだとTestFuncではなく_TestFuncになるからじゃね?
[はい][いいえ]の2つのボタンがあって、 右上の[×](クローズボタン)も有効なメッセージボックスって、 「MessageBox()系のAPIでは作れない」ってことでよろしいでしょうか…?
DebugTracerというツールを使ってOutputDebugStringの文字列を表示することができるようにました。
しかし、エラーコードは6(無効なハンドル)でした。環境に問題があるのでしょうか?
>>396 SDKをアップデートする必要があるのでしょうか?WinXPHomeSP1で作業しているのですが、
SP2に移行した方が良いのでしょうか?
>>399 hMyLibがNULLかどうかも判断せずに、GetLastErrorしてOutputDebugStringしてないか?
これだからタダコンパイラ使ってるような奴はイヤなんだよ!
>>398 作れません。
Xで閉じてキャンセルなら「はい/いいえ/キャンセル」の形式にしないとユーザわけわかんなくなるし・・・
>>402 どうもありがとうございます。
> Xで閉じてキャンセルなら「はい/いいえ/キャンセル」の形式にしないとユーザわけわかんなくなるし・・・
確かにおっしゃる通りだと思います。
ただ、例えばデスクトップ上などでファイルを右クリック⇒削除を選ぶと、
>>398 のようなダイアログボックスが表示されるので、可能性がないわけではないかな…と思いまして。
>>399 hMyLibは、NULL(=0)ではなく、012B0000という値を持っていました。LoadLibraryは失敗していなかったようです。
しかし、エラーコードをチェックすると、その値が無効であると言われてしまいます。
>>404 ほとんどの場合、関数が成功した場合、SetLastErrorされないので、
GetLastErrorしても意味ない。
つーか、GetProcAddressのTestFuncを_TestFuncに書き換えれば、うまくいくはず。
>>405 ありがとうございます。SetLastErrorとGetLastErrorの働きがよく分かりました。
指示通りに書き換えてみたのですが、うまくいきません。
ここはお前の日(AAともにry
408 :
デフォルトの名無しさん :04/10/08 22:18:38
黙ってりゃ報告くらいしろと騒ぐし
409 :
デフォルトの名無しさん :04/10/08 22:24:37
グローバルフックを用いてキー入力をフックして、 フックプロシージャの中で、目的のウィンドウにキー入力を送信したいです。 どういう風に目的のウィンドウのウィンドウハンドルを取得するのがスマート、 というか一般的なんでしょうか
410 :
ぬるぽ :04/10/08 22:25:46
必死だな
>>409 目的のウィンドウが自分で作ってるウィンドウなら、共有メモリ領域にハンドルを書いておく。
そうでないなら、EnumWindow とかでゴリゴリ探すとか、Spy++ で手動で探したときと同じ
方法で探す。
>>409 目的のウィンドウのタイトルotウィンドウクラス名がわかってるならFindWindowも
>>411 >>412 ありがとうございます
自前のウィンドウに送りたいだけなので、
色々やってみます
>>414 あきらめかけていたのですが、どうもありがとうございます。
でも、レスをいただけないということは、いい方法がないのかも・・・
416 :
デフォルトの名無しさん :04/10/09 00:51:44
>親ウィンドウに次々と通知することで実現しているのですが、あまりスマートとはいえません。 なんでスマートといえないんだ? 君のプログラムは親関数に次々と return することで実現するより グローバル変数のほうがスマートといえるのか? jmp_buf みたいに親ウインドウのハンドルを次々に渡しておいて 通知はそのハンドルで一挙にって手もあるが、俺は推奨しないなあ・・・
417 :
デフォルトの名無しさん :04/10/09 00:54:41
もしかして GetWindowLong / SetWindowLong を知らないのか?
419 :
デフォルトの名無しさん :04/10/09 01:14:49
説明するのだるいんでキーワードだけ出しとく WNDCLASS::cbWndExtra GWL_USERDATA ポインタをキャスト
やっぱりただのアホだったか
421 :
デフォルトの名無しさん :04/10/09 01:25:53
痛いネタいっぱつお見舞いするか
423 :
デフォルトの名無しさん :04/10/09 01:35:23
誰の発言かわからなくなるまでしばらく沈黙
sageてないのは二人しかいないような。
お返事が遅くなりました。レスをくださった皆さん、どうもありがとうございます。
>>416 > なんでスマートといえないんだ?
すみません、「スマートといえない」という表現には語弊がありました。
ただ、取得のタイミングさえ合っていれば GetFocus() で一発で済むところを
わざわざ次々と橋渡ししなければならない構造にひっかかるものはありました。
GetFocus() を実行するのにいいタイミングで送られてくるようなウィンドウ
メッセージが存在するということが、実は一番期待していた答えだったのです。
> グローバル変数のほうがスマートといえるのか?
いえ、私もできるだけグローバル変数は使わないことにしていますので、
グローバル変数を使うことをためらった結果、あのような構造になったわけです。
>>417 >>419 > もしかして GetWindowLong / SetWindowLong を知らないのか?
私へのレスでしょうか? 普通に使っていますが、この場合はそれほど
有用ではないような気が…。私へのレスでなかったらすみません。
>>425 いろんなフレームワークで行っているPreTranslateMessageみたいなことやれば?
MFCのフレームワークでさえ、結構面倒な機構を準備してフォーカスの 復元をしてるから、一発で解決するようなメッセージは無いと思う。
> ・hMyLibをstaticにしないと強制終了する。
> ・WM_PAINTメッセージが複数回ディスパッチされる。
WM_PAINTハンドラにMessageBoxを置いたことが原因でした。(^_^;)
> ・DLLのロードに失敗する。
GetProcAddressに失敗していました。エラーコードは127(指定されたプロシージャが見つからない)です。
実は123章のプログラムでもファイルマッピングオブジェクトの読み出しに失敗します。
名前を指定する方法に問題があるのでしょうか?VCとBCCの仕様の違いでしょうか?
>>405
>>428 DLLは自作か?その際に名前のエクスポートはしてるのか?
エラーコードが出てるんだからまずその内容を調べろよ。
回答者のレベル低すぎ・・・。 DepedencyWalkerとかでdll内部の関数名を確認しろ。 ま、DepedencyWalkerがなくてもdllの中身が見れるはずだが。 VCでビルドした場合だとC++のデフォで関数名が変わるのは常識だぞ。 エクスポート関数名に@とか混じってないか?
>>430 374を読んでる?
アンタもレベル低すぎですから!残念!
bccのデフォルトの呼び出し規約は__fastcallのはずなので DLLの方で #define EXPORT extern "C" __declspec(dllexport) __stdcall EXEの方は typedef __stdcall int (*PTESTFUNC)(int, int);
>>431 読解力ないな。誰も話をVCだけに限定してないだろ。
それともBCはdllの規格をMSの規則に逆らうわけか?
質問者はBCC使ってるのにVCの話したり、 CでのコーディングなのにC++で関数名が変わるのは常識とか言ったり 他人をレベル低いとか言ってるのに 自分もトンチンカンなレスしてるからだろ… >それともBCはdllの規格をMSの規則に逆らうわけか? 関数名の問題なんでDLLの規格は関係ないでしょ。
>>432 やはり、うまくいきません。
元のソースコードはVCを基準に書かれているので、BCCとの仕様の違いが明確になれば、
対処できると思うのですが...。(^_^;)
もうVC買うかフリー版のVC使うかBCCでのサンプルを見つけろ。
>>434 >Cでのコーディングなのに
そんなこと書いてあった?
>>434 君は
>>374 の足りない記述に関して通常の脳内補完をしているようだ。
それは通常レベルのプログラマ相手なら正しいだろうが、
初心者相手の場合はそうではない。
多くの場合、ありとあらゆる疑いの眼差しで初心者を見守ってあげる必要があるのだ。
>>438 DLLのソースにextern "C"が有るから
C++の名前変形は関係ないでしょ。
441 :
デフォルトの名無しさん :04/10/09 09:34:46
>それともBCはdllの規格をMSの規則に逆らうわけか? parse error
つーかもう初心者スレでやってよ。
443 :
デフォルトの名無しさん :04/10/09 09:53:30
QueryPerformanceCounter、QueryPerformanceFrequency この2つのAPIは最近のPCでエラーが起こりますか? たとえば、CPUによって動作しないとかありますか?
>>437 紹介して頂いたツールを利用してDLLをリストアップしたのですが、ロードしたDLLは見当たりません。
しかし、LoadLibraryには成功しています。ロードしたDLLと、それに含まれている関数の名前も、
呼出元と呼出先で相違がないことを確認しました。
今なら言える 心の底から氏ねと
446 :
デフォルトの名無しさん :04/10/09 10:54:48
>>444 Z:\>dumpbin /exports dll04.dll
Microsoft (R) COFF/PE Dumper Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file dll04.dll
File Type: DLL
Section contains the following exports for dll04.dll
00000000 characteristics
0 time date stamp Thu Jan 01 09:00:00 1970
0.00 version
1 ordinal base
2 number of functions
2 number of names
ordinal hint RVA name
1 0 00001238 _TestFunc
2 1 00009158 ___CPPdebugHook
(ry
まず
>>374 は勉強が足りないな。
レス受けた内容についてもろくに解かってないようだし、
1日くらい試行錯誤してから書き込んだほうがいい。
>>443 キミの知り合いが突然、「このAPIは最近のPCでエラーが起こりますか?
CPUによって動作しないとかありますか?」って質問してきたらどうする?
返答に困るデショ。
>>448 高解像度カウンタは古いCPUだと使えないわけだが
>>443 IntelならPentium以降(P54なら確実、P5はしらん)
AMDは少なくともK5はサポートされてたはず
Cyrix系は不明
脳内HDDと脳内メモリの容量が小さい漏れにはプログラミングは不可能ですか? 電話の相手の苗字とかすぐ忘れるんだよ。
ずいぶん上の方に流れてしまいましたが・・・
>>426 > フレームワークで行っているPreTranslateMessageみたいなことやれば?
どうもありがとうございます。ただ、PreTranslateMessage の機構を
導入するとなると、私のイメージするものからは遠ざかってしまいそうです。
>>427 > MFCのフレームワークでさえ、結構面倒な機構を準備してフォーカスの
> 復元をしてるから、一発で解決するようなメッセージは無いと思う。
なるほど・・・MFCではほとんど組んだことがなかったので気が付きませんでした。
あきらめて今までの方法でいこうと思います。どうもありがとうございました。
>>444 もう1度122章のプログラムを作り直せ。
もとのソースは見るな。どこも書き換えるな。
.defファイルちゃんと書いてるのかな
>>450 output = (input)%size
って感じ。
たとえば文章を80文字で wrap すると、81文字目は次の行の先頭に表示される。
456 :
デフォルトの名無しさん :04/10/09 14:12:13
>>454 __declspec(dllexport) してるんだからそんな必要はない。
ラベル名に対する、ある思い込みが邪魔をしているだけだ。
>>456 はぁ?嘘もいい加減にしろヴォケ
defファイルきちんと書かんと@付いた変な名前になって
GetProcAddressで引けなくなるぞ
extern "C"が要るんだっけ? でもそうすると他の言語から呼び出せなくなるね
459 :
デフォルトの名無しさん :04/10/09 14:46:45
>>457 装飾名になるかどうかはエクスポートしたかどうかとは無関係
↑何言ってるのかワカンネ ほら、チョン学校で日本語やり直さないと
462 :
デフォルトの名無しさん :04/10/09 14:57:34
>>460 だいたい「変な名前」なんて用語ねえんだよ
おおかた MSU 逝く金もねえんだろ (プゲラ
463 :
デフォルトの名無しさん :04/10/09 14:58:50
MSDN も全部デッドコピーか
>>459 装飾名になるかどうかはエクスポートしたかどうかとは無関係だから、
defファイルを書いておかないと装飾名つきのままエクスポートされてしまうと言っているのだと思うが。
465 :
デフォルトの名無しさん :04/10/09 15:04:55
>>464 なるほど、アフォケテーイでよかったんだな
質問者の分際で情報小出しする馬鹿は、もうスルーしろ。 ・・・・・・・・・・・・・・dllネタ終了・・・・・・・・・・・・・・・・・・・・
467 :
デフォルトの名無しさん :04/10/09 15:17:06
・・・・・・・・・・・・・・dllネタ再開・・・・・・・・・・・・・・・・・・・・ 回答者づらをしてみたかっただけのど初心者が1人いるようだがスルーよろ
>>449 質問者は「最近のPC」と書いてるデショ。
質問者はもう少し情報を提供してくれないと返答できませんョ。
469 :
デフォルトの名無しさん :04/10/09 15:39:52
もう少しって、どのくらいか基準でもあるのか? 詳しく書かれすぎても連投荒らしみたいになるぞ どんな情報が必要かは回答者ごとに異なると思う
核心の部分を故意に記述しない質問者も荒らしだろ。 しかも、他人を巻き込み無駄レスを大量発生させる。
471 :
デフォルトの名無しさん :04/10/09 16:17:10
いっぱつサックリ答えられる必要ないじゃん 技術的な話を楽しみに来てる人だっているわけで・・・
472 :
デフォルトの名無しさん :04/10/09 16:46:47
RegisterClassがめんどいんですけど。 最近では既存のコントロール乗っ取ってサブクラス化して 自分色に染めるのが好きです。 そういう用途に都合の良い既存クラスってありませんか?
腐女子は何でも801の対象にできる
477 :
デフォルトの名無しさん :04/10/09 20:00:22
GDI+でダブルバッファリング使いたいんですけど、 C++の場合はどのようにすれば良いんでしょうか? C#だと Image img = new Bitmap(width , height); Graphics buf = Graphics.FromImage(img); として、バッファに書き込み最後に g.DrawImage(img , 0 , 0); とすれば良いと、分かったんですが C++になると分かりません。 どなたか教えてください
480 :
デフォルトの名無しさん :04/10/09 20:46:54
>>479 BCCちゅーからコマンドラインかと思たーよ
>>480 BCC Developerを使用しています。
>>479 何の仕様が違うと思ってるのかは知らないが、
そこに書かれている内容はVC++の場合となんら違いない。
483 :
477 :04/10/09 21:09:48
>>478 C++の場合
Image img = new Bitmap(width , height);
の部分でどう書けばいいか分からないんです。。。
>>479 それってGetProcAddressを使った明示的ロードには見えないがそれでいいのか?
>>484 次のように書き換えました。
extern "C" __declspec(dllexport) int TestFunc( int a, int b )
↓
extern "C" int WINAPI __declspec(dllexport) TestFunc( int a, int b )
このように書き換えないと、DLLのロードに失敗します。
もういいじゃん。飽きた。
まんぐりがえしを抑制するだけだろ
490 :
デフォルトの名無しさん :04/10/09 23:00:42
荒れるからageないで
493 :
デフォルトの名無しさん :04/10/09 23:30:48
うっさい
ウィンドウのサイズ変更したら再描画するようにするにはどうすればいいか教えてください
CS_HREDRAW, CS_VREDRAW
>>495 ありがとうございます。あとWM_PAINTメッセージじゃなくて
ウィンドウのサイズを変更したら送られるメッセージとかってありますか?
>>496 WM_SIZE
っていうかMSDN読め
スパれよ小僧が
WM_SIZINGも調べとけ
>>432 >>491 うまくいかなかったのは、新しいDLLをコピーし忘れ、古いDLLの方をロードしたためです。
いい加減なレスをして申し訳ありませんでした。(^_^;)
PostMessage(hfw,WM_KEYDOWN,VK_SPACE,0); のように、キー入力メッセージを渡したいのですが、 Ctrl+A(コントロールを押しながらAキーを押す)入力メッセージを 渡すにはどうすればいいでしょうか?
keybd_eventにしたら?
ウィンドウの終了処理について×ボタンを押すてもexeが終了せず、 ビルドを再度行うと、LINK : fatal error LNK1168: 書き込みモードで Debug/rap.exe を開けません というエラーが出ます。 以下ソースです。原因分かる方がおりましたらお教え願います。 LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { switch(msg){ case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,msg,wp,lp); } ----------略-------------------- while(GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg); return msg.wParam;
×ボタンについては、WM_CLOSEを処理汁。 で、前のプログラムをちゃんと終了させればエラーも出なくなる。
>>504 終了しないプログラム(ファイル)を書き換えることができないのでビルドに失敗する。
何らかの方法で強制終了してからビルドすべし。
>>505 WM_CLOSEをDefWindowProcに送ればDestroyWindowされるけど。
>>507 そうでしたね。出しゃばってすみません。
みなさまレスサンクスです。 WinMain関数中のWNDPROC 型の指定をWndProcでは無くべつ名前にしておりました。 お騒がせ致しました。
変数aに読み込んだデータをあるところで区切って改行して下に表示したいのですがどうすればいいですか?
1. あるところで区切って改行する 2. 下に表示する 以上
いやだからさ、クライアント領域全部に描画しちゃうからさ 1回描画したら2回目以降の表示で前回の表示消えちゃうだろボケが
>>512 この文章の意味がわからないのは漏れだけ?
お前だけ
>>513 書いてある文字は理解できるが内容が理解できん
どこから出てきた話だ、これ?
はいはい、わかりましたよ。まずよ、文字描画するときって 変数に貯めてる文字をいっぺんにクライアント領域に描画しますよね。 そうじゃなくて変数に貯めてあるデータを決まったバイト数分ごとに 改行して描画したいのですよ糞ボケが。なので教えてくださいタコが
・補足後も情報足りない ・口調が悪い 答える物好きもおるまいて
>>516 文字列を任意の位置に表示することはできるの?
だったら改行したい量ごとに文字を分割して
それぞれ任意のy座標に書けばいいだけじゃないか。
まあ馬鹿にはわからないだろうがバックバッファ持って横幅文字数に区切った文字列を描画 その文字のサイズ分Yを足して2行目描画 描画実行時にそれをクライアント領域に転送 API以前の問題だな。馬鹿らしい
なんでバックバッファが出てくるんだ?
>>520 いきなりクライアント領域に2回に分けて書いたらちらつく場合があるからじゃない?
バックバッファなんてわかんねぇよチンカス
だまれぼけ
変数に改行する情報とかって入れれないの?
>>510 DrawTextのRECTを設定して描画じゃだめなのか?
描画するときはエディットコントロールにEdit_SetTextマクロを使って描画してます。 れくと構造体は使いません
普通に改行いれちゃだめのか?
普通というと?
バカは放置しろよ
方法わかる方のみレスをつけてください。バックバッファとか言ってる馬鹿はいりません
*NULL='\0';
そんなことはできない
特定のバイト数分ごとに変数に特定の文字は入れれる。改行ができない
dwStyle = WS_CHILD | WS_VISIBLE; dwExStyle = WS_EX_LAYERED; だと表示されないんだけど、これは仕様ですか? MSDN 読んだけど、特に注意書きはないし(´・ω・`) ちなみに、WS_CHILD をなしにすると、 ちゃんと半透明もしくはカラーキー付きで表示できるのは確認済みです。
WS_EX_LAYERED Windows 2000/XP: Creates a layered window. Note that this cannot be used for child windows. Also, this cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.
Windows XP: With WS_EX_COMPOSITED set, all descendants of a window get bottom-to-top painting order using double-buffering. Bottom-to-top painting order allows a descendent window to have translucency (alpha) and transparency (color-key) effects, but only if the descendent window also has the WS_EX_TRANSPARENT bit set. Double-buffering allows the window and its descendents to be painted without flicker.
>>536-538 レスサンクスです
> Note that this cannot be used for child windows.
ハッキリ書いてましたね(´・ω・`)
日本語のほうにはこれっぽちも書いてないのにヽ(`Д´)ノ
お騒がせしました。
奇跡。改行できた。お前等マジで糞。訳に立たなすぎ(プゲラチョフ 特にバックバッファとか逝ってた糞ボケ。はぁ?アホ?なに?バックバッファって?
子ウィンドウはダメっぽいので、WS_POPUPでやることにしました。 フォーカスを親から奪ってしまう点などは、無理矢理SetFocusさせて解決できそうです。 ああ、あと位置も、親のWM_MOVEの時にまとめて修正で行けそうです。 ありがとうございました。
542 :
デフォルトの名無しさん :04/10/13 02:54:42
Sleep(1)で10ms待たされます。 もっと正確なSleepを使うにはどうすればよいのでしょうか?
>>542 そんなSleepありません。マルチメディアタイマーを使っても
そんな精度出るかどうか。
戻ってくるまでに 1010ms かかるってこと?
>>544 それでは、1ms待ちたいのに、1秒と10ms待たされる事になりますけど…
timeSetEventも駄目でした。
timeGetTimeで測定しているのが駄目なのかもしれないので、
PerformanceCounterで測ってみます。
PerformanceCounterだと、20ms待たされる事が一番多かったです。
Sleepはタイムスライスを放棄するためのAPIであって一定時間待つためのAPIじゃない。
じっけんだ! SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL) してから、timeSetEvent したらどうなるのかな? # マシンが応答しなくなるかもしれんがw
>>548 特に重たくはなりませんでした。
timeSetEvent(17, 1, TimeProc, 0, TIME_PERIODIC);
だと、10msか20msにばらけるので使えないと思ったのですが、
timeSetEvent(1, 1, TimeProc, 0, TIME_PERIODIC);
にして、TimeProc内で17ms経過を待ってみます。
549のやり方でも10ms単位みたいです。 >548で単純ループ(CPU使用率100%)で時間を数えると、マシンの応答が無くなりました。 これを変えなければ特に遅くはならないので、単純ループで数える事にします。
>>545 timeBeginPeriod(1) すると、Sleep() の精度も上がるよ。
どっちにしろ、リアルタイムOSではないので完全に正確にはならないが。
PerformanceCounterで10msって・・・どういう環境だよ あれ普通マイクロ秒とかそういう精度だろ?
>>542 何の目的で正確に10ms待つ必用が用途を言った方がいいかも。
>>551 で十分かもしれないし、場合によってはドライバ書いたり
別OSじゃないと駄目だったりするから。
あらゆる状況で10msだけ待つことを保障するっていうのは普通
Windowsじゃ無理。
554 :
デフォルトの名無しさん :04/10/13 13:27:07
zip圧縮をDLL無しで行う方法を教えてください
>>554 ファイルを選んで右クリックでコンテキストメニューが出るだろ。
557 :
デフォルトの名無しさん :04/10/13 13:40:45
>>556 zlibの入手先やリンク方法を教えてくださ
連邦のモビルスーツはグーグルを知らんのか!
グーグルはどこで売っているのでしょうか。近所にはGOOしか売ってないです。
え?うちの近所じゃinfoseekとlivedoorも打ってたよ
安かったから買ってきたんだが、infoseakとJivedoorだった!だまされた!
>>552 QueryPerformanceFrequency
>>545 timeBeginPeriodしなきゃtimeGetTimeの精度も上がらないのでは?
563 :
デフォルトの名無しさん :04/10/13 20:23:46
すみませんが質問させて下さい。 vc6.0+win32環境です。 ツールバーをカスタムドローしてボタンのアイコンを書いています。 NM_CUSTOMDRAWメッセージを処理してNMCUSTOMDRAWのRECTメンバ からアイコンの位置を取得する時に、ドロップダウンを持つボタンのみ 縦の位置がずれてしまいます(XP環境でテーマ(manifest)を置いている時に限りです)。 何方か位置がずれない方法を知りませんでしょうか? よろしくお願いします。
リストビューのカラムの数はどうやって得るのでしょうか?
565 :
デフォルトの名無しさん :04/10/13 21:24:07
>564 LVM_GETHEADERと HDM_GETITEMCOUNTかな
Windows2000のグループ名を取得したいけどどうしたらいい? MSDNで見つけられなかった・・(つД`)
NetWkstaGetInfo
>567 ありがとうございまつ。これで今日寝られる・・・(つД`)
ファイルのオープンに関して質問です. GetOpenFileName()で指定したファイルをオープンできる所まで試しました. ですが,選択する画面でデフォルトのパスがマイドキュメントになっています. これを任意のディレクトリに変更するにはどうしたらよいでしょうか? VC7環境です
OPENFILENAMEのメンバかたっぱしから調べろ
WindowsXPで ファンクションF3キーでの「検索結果」ウインドウ をグローバルフック等で無効化したいのですが、 どのクラスでメッセージを受け取っているのか 分からない状態で困っています。 spy++などで「Shell_TrayWnd」を覗いてみたのですが 「0xC0F2」(登録:ShellFileOpened)のメッセージが ポストされていて、未処理の様で、ここでは無いみたいです。 どなたかご存知の方いらっしゃいませんでしょうか?
少なくとも指定した分だけ待つ、じゃないかなあ。
>>572 もしかして、環境は9xなのか? 2000ではそれなりにきっちりSleep()してくれたんだが。
sleepは最低これだけ待つというだけだぞ だから極端な話20秒ウェイトがかかったとしても仕様通り
MSDNはちゃんと読もうね。 The Sleep function suspends the execution of the current thread for "at least" the specified interval. ""内に注目。
ほんとに、プログラマめざしてるのか? 最低、2chなんぞ頼るなよボケ、絶対採用しない
>>578 間違ってあなたの会社へ行かないようにするため、社名を教えてくれませんか?
>>580 1ms単位が必要と言うより、10ms単位が困るのです。
10ms単位だと、11ms待ちたい時に20ms待つ事になり、倍時間が変ってきます。
これが、100msと110msとなら気にならないかもしれません。
>>581 それはやっぱり1ms必要ってことじゃん
>>581 11ms待ちたい時に20ms待つ事になっても大丈夫なように作るのが
Windows流です。
Sleepがどんなに正確でも Sleepから返って来た直後に別スレッドに持ってかれたら意味無いわけで。 マルチタスクOSで正確なウェイトなんて考えるほうがバカ。
というか、ゲームでのウェイトにSleep使うな メインループでぶん回し、メインループから分岐で各処理を呼び出す ウェイトが必要なら、その処理を空回りさせて処理しろ うちのプログラムで使ってるそのへんの処理を簡略化して書くとこんな感じだ // これはメインループから呼び出される関数内 switch( process ){ case WAIT_START: TickCheckStart = GetTickCount(); oldprocess = process; process = WAIT; break; case WAIT: if( (TickCheckStart + 10) > GetTickCount() ) process = oldprocess; break; case KEYWAIT: // キー待ち処理とか // あとはこの調子で画面効果とか、スクリプト処理とかを分岐させていく } // 画面描画
>587 常時CPU使用率が100%になるゲーム、逝ってよし。 Sleepを怖がってWindowsでゲームが作れるか!
>>588 あぁ、Sleepは入れるよ
ただ、Winに処理返すために使うのであって、10msきっちりとかは考えない
>>581 で言ってるような細かいことにSleep使うのはやるなってこと
Sleep(0)じゃCPU使用率が100%になるから意味内
WaitForXXXでいいだろ。 Sleepなんか使うな、メッセージへの応答も遅くなるし。
ウィンドウメッセージはメインスレッドで処理して、 ゲームループは別スレッドで回すモンじゃないのか?
ああああ,11111,うううう,おおおお,22222 カンマ区切りのデータを読み込んで それぞれのエディットボックスに表示させたいと思っているのですが・・・。 最初はWM_COMMANDメッセージのイベントにANSI Cでstrtokを使用し、 カンマ区切りでデータを分割しようとしたのですが データに日本語が入っているため、うまくいきませんでした・・・。 こうすれば超簡単とかいうのがございましたらお教え願います。
>データに日本語が入っているため、うまくいきませんでした ダウト というかWIN32APIの話ではないな。 どーしてもWIN32APIで処理したいなら、ODBCでテキストドライバでも使え。
strtok のマニュアルを隅々まで読め。超簡単だろう。
>>593 Win32APIじゃないけど_mbstokじゃだめか?
レスたいへんありがとうございます。(TT) 日本語をカンマ区切りでテキストに書き込めましたので 読み込みもできると思い込んでおりました。 英数字だけのカンマ区切りのデータの場合の処理の仕方がありましたら どんなものか概要をお教え頂ければ幸いです。 WinAPIでコントロールをたくさん貼り付けて作成しているので、 こちらで質問させて頂きました。 そもそも、WinAPIにANSI Cを使うことは間違いなのでしょうか。
598 :
デフォルトの名無しさん :04/10/14 19:18:31
スタティックコントロール内の文字なんですが、縦センタリングって可能なんで しょうか? 自動的でなくても、表示位置を任意に設定できるならそれを使おうと思うのです が、どうしても方法が分かりません。
> そもそも、WinAPIにANSI Cを使うことは間違いなのでしょうか。 それ自体は間違いでも何でもない。 ・ANSI C関数の使い方(選び方) ・このスレの使い方 が間違っている
DVD-RAMの空き容量を取得したいのですが、 GetFreespaceEx()で取得できるのでしょうか?
重ね重ねでもうしわけないのですが、 DVD-RAMドライブにDVD-RAMを挿入した状態で、 GetDriveType()を行った場合、DRIVE_RAMDISKは返ってきるのでしょうか?
>>600 GetDiskFreeSpaceEx()のことかね?
>>601 DVD-RAMはあからさまにRAMディスクじゃねえからなあ…
>>602 そのとおりです。間違いました、すみません。
>>601 Panasonic LF-D201ではGetDriveType()でDRIVE_CDROMが返ってきた。
GetDiskFreeSpaceEx()で空き容量を取得することは出来た。
>>602 お手数おかけして、すみませんでした。
試して頂いたおかげで助かりました、どうもありがとうございました。
HRESULT hr; IStream pi; if( FAILED(hr = SHCreateStreamOnFile("A:\\a.txt", STGM_WRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_DIRECT, &pi)) ) { /* エラー */ } const UINT size = 1457665; LPBYTE buf = new BYTE[size]; ULONG written; if( FAILED(hr = pi->Write(buf, size, &written)) ) { /* エラー */ } 空のフロッピーに1457665バイト(空き容量+1バイト)書き込みます。 空き容量より大きいので失敗すると思ったのですが、なぜかS_OKが返ってきます。 writtenにもsizeと同じ値が返ってきてます。 空き容量が足りないはずなのに、なぜ成功してしまうのでしょうか?
>>607 >IStream pi;
IStream* pi;
修正
あと、実際にフロッピーに作られたファイルは1,454,080バイトでした。
>>492
>>609 バッファリングされるからWriteではエラーにならないとか?
もっと極端に大きなサイズを書こうとすればエラーになるんじゃない?
CPU使用率が100%のまま移行するとCPUが熱くなって、 ノートパソコンだとファンがうるさいそうです。
>>610 Commit(STGC_DEFAULT)を呼んだらSTG_E_MEDIUMFULLが返ってきました。
どうやらバッファリングしてるみたいです。1,454,080が512や4096の整数倍だし。
とりあえず最後にCommitすることで解決しました。Writeでエラーにならないのは釈然としないけど…
ありがとうございました。
>>612 なんでもありません。いつのまにか付いてました。
>>613 >Writeでエラーにならないのは釈然としないけど
実際に書き出しているわけではないから仕方ないかと。
エディットボックスやコンボボックスなどのをコントロールをたくさん作成して あるお方のお手本通りウインドウプロシージャ内(WinPrco)のWM_CREATEで作成しているのですが WinMain関数内で作成しないでWM_CREATE内で作成する理由はあるのでしょうか。 また、WM_CREATEは、プログラム起動時に発生するメッセージという認識なのですが 間違っていますでしょうか?
>>615 WM_CREATEが来るのはウィンドウ作成中
WinMainでウィンドウ作成後に設定するよりスマート(だと俺は思っている)
WM_CREATEはプログラム開始時ではなく、ウィンドウ作成時。名前の通り
ウィンドウプロシージャを再利用する時、そのウィンドウに 関する初期化処理をWM_CREATEに書いておけばウマーとか。
最近、ワイド液晶を搭載したノートPCとかが出ていますけど、 こういうモニタの物理的なアスペクト比を取得する手段って ないでしょうか?
レジストリ
GetDeviceCaps で取れないか?
GetMonitorInfoじゃないか。
質問です。 CreateWindowで作成したLISTBOXで WM_DRAWITEMを使わずに リストボックスの各項目の背景を任意のビットマップにする方法はあるでしょうか? なんかうまいことやってるアプリを昔見かけた気がするのですが・・ あれはオーナードローなのかな。
>>615 グローバル変数の使用を極力避けるようなプログラミングを心がけている人なら、
自然と WM_CREATE の中で初期化をおこなうようになりますよん。
>グローバル変数の使用を極力避けるようなプログラミングを心がけている人なら、 >自然と WM_CREATE の中で初期化をおこなうようになりますよん。 関連性ないよ
>>615 もし何らかの理由でコントロールの構築に失敗した場合、
DestroyWindowせずとも-1を返してやるだけでウインドウの作成をキャンセルできるから。
626 :
デフォルトの名無しさん :04/10/15 21:40:35
>>389 ローカルフックでWM_SETFOCUSのHWNDを保存しる
ShellExecuteEx で実行するプログラムに環境変数を設定して渡してやるには どうしたらいいのでしょう?SEE_MASK_DOENVSUBST フラグを使えばいいよう 気もするんですが、ぐぐってみてもよくわかりませんでした・・・orz
>>627 環境変数を渡すにはCreateProcessじゃないと無理。
SEE_MASK_DOENVSUBSTはプログラムのパスやコマンドライン引数の部分で"%WINDIR%"のように指定された環境変数を展開させるためのフラグだったはず。
エディットコントロールに文字を転送して表示してるのですが なぜかアルファベットが2バイト文字のようにすこし大きくなります。 表示された文字を別のメモ帳にコピペするとふつうの1バイト文字になります。なぜでしょうか?
転送ってなあに?
SendMessageのことです
へえ
そういうフォントだからだろ
そういうフォントというのはエディットコントロールの仕様ということですか? モーダルダイアログボックスにSendDlgItemMessageで転送するとふつうに表示されるのですが
MFCが難しいのでWin32APIでプログラム作成しているのですが Win32APIの仕事って少ないでしょうか。MFCを使えたほうがよいのでしょうか?
とりあえず就職しろ 覚えるのはそれからでも遅くは無い
チャットソフトをつくりたいのですが どこか 解説しているようなサイトなどないでしょうか
>>636 就職しています。
ANSI Cはできるので、ステップアップと思い、Win32APIをやっているのですが
仕事ってあります?Win32APIでプログラムを作成すると無駄に時間だけが掛かってしまうのは私が馬鹿だからなのでしょうか。。。
639 :
デフォルトの名無しさん :04/10/16 02:44:46
>>635 新卒ならたいがいのところは大丈夫。
30過ぎてるときついかもしれないけど。
640 :
デフォルトの名無しさん :04/10/16 02:46:23
>>638 就職先で必要でなければ無理に覚えることは無いでしょう。
641 :
デフォルトの名無しさん :04/10/16 02:52:53
>>638 MFC使うより格段に仕事が早く高品質にできるのなら
多分あると思いますよ。
MFCで組むにしてもDelphi使うにしてもC/C++でベタ書きするにせよ、ネイティブアプリ作ってる限りはWin32API自体は把握できてないとだめ。 それを踏まえた上でどうやってアプリ作るかは好きにすればいい。って言っても仕事だとその辺なかなか自由にはならんだろうが。
特にMFCは必要な機能に限ってクラスになってなかったりするんで APIの知識は無駄にならないと思う
>>638 もしWin32APIでCUIアプリケーションを作成しているとしたら、あなたが馬鹿だからです。
GUIアプリケーションを作成しているとしたらそもそも単純に時間を比較すること自体が間違ってます。
会社によっては Win32API と独自クラスで開発しているのでは?
質問です グローバルフックで エディットコントロールのデフォルトのポップアップメニューのハンドルを取得したいのですが どうやればできるでしょうか? WH_MOUSEでWM_CONTEXTMENUだとエディットコントロールのハンドルが帰ってきて駄目でした
コントロールとポップアップメニューは関係ないから メニューハンドルを得るのは無理では?
開発効率悪そう・・・
651 :
デフォルトの名無しさん :04/10/16 13:03:23
だって MFC って 生産性<オーバーヘッド
ATL は COM 前提だし
そこでWTLですよ
bccでも使えるライブラリほしいな
hoge.h #define ID_HOGE 1 #define ID_HAGE 2 /////////////////////////// hoge.rc HOGE MENU { POPUP "ほげ" { MENUITEM "はげ", ID_HAGE ////////////////////////// 「POPUP "ほげ"」にID_HOGEを関連付ける方法はなかとですか?
#define MENUDEF(name) name MENU { POPUP #name { MENUITEM #name, ID_##name ではだめか? リソーススクリプトの #define が C と同じプリプロセサ呼び出してるかどうか自信ないが・・・
バカか?
相手にしない方がいいかも
ディレクトリ(フォルダ)を指定して、それ配下のファイルとディレクトリの合計サイズを 取得するAPIってないでしょうか?
ない
662 :
デフォルトの名無しさん :04/10/16 21:08:14
WLX_NOTIFICATION_INFOって構造体はどこに定義してあるんでしょうか? MSDNによればwinwlx.hに定義してあるらしいんだけど、ヘッダをインクルードしても 「定義されてません」って言われちゃう。で、ファイルの中を見たらそんな構造体ありゃしない。 ググっても外国のページしかヒットしないし、仕方なくそのページを開くと普通に使ってるし。 何か足りないのかな?
お前の脳味噌。
>>662 ヘッダ読んだ?
#if とかでハネてるケースよくあるよ
>>662 私も確認してみた。
VC98のwinwlx.hには、WLX_NOTIFICATION_INFO構造体がないね。
そんなわけで、
>>665 の助言に従うべきでしょう。
[ファイルから検索] もしたほうがいい
↑それ便利だけど、実装するとなるとちょっと遠慮したいよね
>657 それはちょっと無理です。 >658-659 スレ汚し失礼しました、申し訳ないです。
>>663 足りないから補いたいのは山々なんだけどね〜
>>664 ,667
winwlx.hをエディタで開いて探したよ。
でも見つからなかったんで、「ファイルから検索」で探したよ。
残念ながら見つからなかったさ。
>>665 環境はVC6 SP6 なんだけど、これより新しいのって何だろ?.NET?
VC6には入ってなかった、SDKに入ってた。
>>671 いや〜お恥ずかしい。早速インストールしたさ。あったさ。WLX_NOTIFICATION_INFOが。
やっぱり脳が足りないようで…
助かりました。どもです。
HeapAlloc()で確保するメモリは、必ず物理メモリ上に確保されると考えていいですか?
なぜそう思うんだ? なぜそれが気になるんだ?
もうひとつ。 VirtualLock()はVirtualAlloc()以外の方法で確保したメモリにも使えますか?
>>674 ページアウトされないってことなら、どんなメモリ確保も物理メモリ上にある保証はありません。
「物理メモリ」を誤解している悪寒
韓国から拾ってきたVC7ソースなんですが、 これはEUC-KRでかかれているらしく、リテラル文字列が以下のように終端の"が なくなってしまいます。 InsertColumn(3,"コクウスセ・,LVCFMT_LEFT,65,3); 日本語環境でclコンパイラにEUC-KRを認識させる方法はないでしょうか?
濃く薄せ
>>681 ソースファイルを適当なエディタで読み込んで変換するんじゃいけないの?
ありがとうございます。 エンコードつき保存で、EUC-KR -> UNICODEでできました。
画面遷移を行いたいのですが、定石ありますでしょうか? 画面ごとにexeモジュールを作成しているので 画面の中のコマンドボタンを実行すると 別画面(exe)を呼び出し、元のexeは終了する方法を考えています。
>>685 なんでそんな面倒なことするんだ?
リソースで定義したダイアログを順々に表示するんではいかんのか?
>>686 レスありがとうございます。
リソースについて調べました。使ってみるつもりです。
リソースで定義したダイアログを呼んでも元ウィンドウは残ったままになってしまいそうなのですが・・・。
別に元のウィンドウが残っててもいい気がするが… 元を親ウィンドウとして処理するってのが普通だと思うけど…。 それが嫌なら、元ウィンドウ消してから 別のウィンドウ表示すれば良いのでは?
ウィンドウ毎に担当者を分けているとか? それで別 exe の方がやりやすいとか。 別画面が終わったら元画面に戻したりしないの? 元画面終わらせたらかえって面倒だよ。
スレ違いかもしれませんが・・・質問させてください・・・ 今、32APIでシューティングゲームを作ってるんですが、 パソコンが壊れてしまったので 新しく買い換えたのですが、 新しいPCの方でいきなり描画処理がおかしくなりました。 カクカクと動くし、 背景以外の透過画像やFPS表示もされない・・・ 前のPCはビデオカードがオンボードだったんですが、 今回のPCはこれを期に一気に RADEON X300 の 128Mを積んだマシンを購入したんですが、 PCI Expressがいけなかったんでしょうか・・・ どなたか解る方いらっしゃいますでしょうか? よろしくお願いします・・・
>>690 もしかしてスレ違いかも? (その場合、ハード板が妥当と思われ)
「積んだ」っていうのがどういう形でかわからんが
特注でつけたパーツが新しすぎると
ドライバが「標準」になってたり
初期ロット系のトラブル抱えてたり
OS 側の処理がタコだったり
つーことは結構あるな
>>691 そういうのもあるけど質問の仕方からして、あんまり慣れてない人が
環境依存のコード書いちゃったっつうのもありうる。
>>690 自分で書いたコードならプロファイルとるなりトレースするなりで
どの処理に時間がかかってるのか調べてから相談しても遅くない。
DirectXつかってるならカードごとに対応してる機能に違いがある
んで〜CAPSみたいなのを調べてみる必用もあるかも。
>>688-689 レスありがとうございます。
リソースで新たな画面を呼び出すと
元のウィンドウが表示されたままになってしまい、
モニター上には元の画面と新しい画面の2画面になってしまわないでしょうか・・。
ってやってみってます。すみません。
exeを作っているのは私一人です。
>>693 だから前のウィンドウはそのつど消せっての
>>694 =695レスありがとうございます。m(_ _)m
main.rcを作成しその中に以下の一行を追加
MAIN_RESORCE "NEXT_GAMEN.EXE"
VC6++のワークスペースのResorce Fileにmain.rcを追加。
ビルドをしたら以下のエラーが表示されました。
C:\Program Files\Microsoft Visual Studio\MyProjects\Main\main.rc (3): error RC2135 : file not found: "NEXT_GAMEN.EXE"
NEXT_GAMEN.exeは、今回編集しているソースと同じディレクトリおよびdebugフォルダにも格納しましたが
上記エラーが表示されます。
初歩的なことですみません。
なにかこんな頭の悪い人のためのお勧めのWin32APIの参考書はありますでしょうか。
どこから突っ込んでいいのかわからない。
>>691 様
>>692 様
スレ違いな質問に答えてくださいましてありがとうございました。
ところで、環境依存のコードとありますが、
現在表示されていないソースでは、
画像の透過処理のTransparentBltを使っているんですが、
ここの処理がうまくいってない様です・・・
これは、環境依存コードなのでしょうか?
よろしければ、ご教授ください。
699 :
デフォルトの名無しさん :04/10/18 14:18:53
GetAsyncStateを使ってキーの押下状態を取得しているのですが、 何個かのキーを同時に押すとBeep音がします。 これを鳴らないようにする方法はないでしょうか。
複数行あるファイルから一行ずつ読み取るにはどうしたらよいのでしょか。 ReadFile関数で読み込みましたら、すべての行を一回で読んでしまいました。。 ReadFile(hFile , strFile , GetFileSize(hFile , NULL) , &wReadSize ,NULL)!=0)
>>701 >702なので、改行文字まで一文字ずつ読む必要あり。
#いっそ、全部読んでからばらすのも手かも。
ちゅうか、わざわざ API 使って テキストファイル読むこともなかろうにと思うが。 C/C++のライブラリ使えば済むじゃん。
はて? 遠回りを奨めるスレでもないと思うが。
>>704 >705なので、スレタイを冷静に読む必要あり。
#いっそPCの電源切って窓から投げ捨てるのも手かも。
>>704 APIでオープンしなければならない事情があったときはどうしたら?
さすがにC/C++ライブラリくらい知ってんじゃないの。 Win32APIにそれ相当のものがあるか?って質問だろう。
>>701 この手の質問に答えられる奴がいないだけだろ?
毎回、この質問が出ても質問者を叩いて終るし。
誰かコードアップしたれよ。
お前がアップしたれよ。
713 :
デフォルトの名無しさん :04/10/18 17:24:49
>>712 fgetsじゃベタだろ。
@FileReadで1バイトづつ読んで、\nで読み込み終了
Aファイルポインタを\nの次に移す。
BEOFまで@を繰り返す
つうソースが欲しいんだと思うぞ。
>>701 は
>>712 fgetsの中身なんて改行文字がくるまでfgetcで読み込むような感じだろ。
となりのメガネが アピアピ連呼するんですが なんとかなりませんか。
>>713 '\n'の手前にある'\r'は捨てる処理を入れたほうが良いんじゃないかい?
717 :
713 :04/10/18 17:33:21
>>716 も、もちろん知ってるよ。
ウ、ウィンドウズの改行マークは"\r\n"だ、だろ?
718 :
デフォルトの名無しさん :04/10/18 17:33:57
timeGetTimeはNT系の場合精度が5ミリ以上になる場合があるとMSDNに書いてあるので, 関数の前後をtimeBeginPeriodとtimeEndPeriodで挟んで精度を上げているのですが, これ(timeBeginPeriodとtimeEndPeriod)ってtimeGetTimeを呼ぶたびに 毎回呼ばないと精度を保てないんでしょうか?
>>713 いくら API スレだからって、
ReadFile で1バイトづつ読ませるなんて、
非効率的な事は勧められんだろう。
そんなことしたら、fgets 使うのに比べて
何十倍も処理時間掛かるじゃん。
>>719 fgetsをベタとか言ってる時点でネタだと思うが。
fgetsのソースを見る、でこの質問は終了のはず。
>>719 貴様!701が読み込みにMutex使ってたら、どう責任取るつもりだ?
なんつーか、質問者が出てこないのに仮定で話を進めるのはこのへんでやめにしないか。 続きは質問者が出てきてからってことで・・・
低レベルなファイル「読み込み」関数は使うメリットあるのか? 具体的にいうと_read()とかReadFile()とかなんだけど。 低レベルなファイル「書き込み」関数は使うメリットがそれなりにあると思う。
>724 非同期 I/O
>>708 _open_osfhandle + fdopen とか。
>>724 CreateFile()の引数でシーケンシャルスキャン・ランダムスキャンを指定したいとか、
キャッシュ効かせないようにしたりとか(確かFireFileCopyとかそういう事してた)、
SetEndOfFile()使いたいとか、2GB・4GB超えるようなファイルを扱うとか?
728 :
デフォルトの名無しさん :04/10/18 19:03:47
C++Builder 5 でユーザーモードから ZwQueryInformationFile() を呼び出すと ハングアップすることがあるんですが、原因がわかる方いらっしゃいますか?
>>728 winternl.h のプロトタイプをそのまま使ってない?
プロトタイプがバグってる(WINAPIが付いてない)から使っちゃだめ
WINAPIじゃなくてNTAPIか まあどっちも__stdcallに展開されるんだけど
>729 ありがとうございます。 ヘッダーは DDK に付属のものを使っています。 NTSYSAPI NTSTATUS NTAPI ZwQueryInformationFile( IN HANDLE FileHandle, OUT PIO_STATUS_BLOCK IoStatusBlock, OUT PVOID FileInformation, IN ULONG FileInformationLength, IN FILE_INFORMATION_CLASS FileInformationClass ); どうも、特定のファイルをクエリーするときにだけ、ハングアップするようなのです。 ハングアップするというのは、この API から戻ってこないということです。
>>724 ReadFile()はCランタイムライブラリを全く使わないプログラムを作るときに使うんだろう。
733 :
デフォルトの名無しさん :04/10/18 23:12:33
IMEにユーザー辞書を追加したあと、 WM_IME_COMPOSITION で変換候補が確定した時にその単語がどの辞書 (標準辞書なのかユーザー辞書なのか)に含まれるか調べたいのですが どうやって調べればいいんでしょうか
734 :
デフォルトの名無しさん :04/10/18 23:32:46
よく年月日のテキストボックスの横に上、下に向いている三角形(▼▲)が あるけど、これってwin32apiでは実装されてないのでしょうか? ▲▼をクリックすると、テキストボックスの日付が変わる機能です。
コモンコントロールのUp-Down
void TForm1::ShowContextMenu(TObject* Sender, LPITEMIDLIST pIDL) { HRESULT hRes; LPCONTEXTMENU pContMenu; HMENU hMenu; POINT pCursor; int iCommand; CMINVOKECOMMANDINFO stInvokeInfo; hRes = m_pDTFolder->GetUIObjectOf(this->Handle, 1, (LPCITEMIDLIST*)pIDL, IID_IContextMenu, 0, (LPVOID*)&pContMenu ); if (hRes != NOERROR) return; hMenu = CreatePopupMenu(); hRes = pContMenu->QueryContextMenu(hMenu, 0, 1, 0x7FFF, CMF_NORMAL); if (hRes == NULL) {DestroyMenu(hMenu); return;} GetCursorPos(&pCursor); iCommand = TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RETURNCMD | TPM_LEFTBUTTON, pCursor.x, Cursor.y, 0, this->Handle, NULL); if (iCommand != 0) { /* stInvokeInfo 処理 */ } DestroyMenu(hMenu); pContMenu->Release(); }
ちなみにBorland C++ Builder 5 です pIDLは、「マイコンピュータ / C: (VOLUME) / HOGEHOGE」 のようになっています この関数を実行すると、メニューは表示されるのですが メニューの表示項目が必ずマイコンピュータのものになってしまいます しかし、そこで強引に HOGEHOGE のメニューで 「ショートカットの作成」を行うと、 「ここには作れません、デスクトップに(r」となり そのできあがったショートカットは HOGEHOGE のものになります hRes = pContMenu->InvokeCommand( &stInvokeInfo ); を実行する、stInvokeInfo で構造体にpIDLを入れる必要が無い事から pContMenu には正しくpIDLが入ってるように思うのですが これは、必ずしもそういうことじゃないのでしょうか?
kab-studio の Codian という所を参考にしました
具体的に渡しているpIDLは
// ファイルのIDリスト
HRESULT hRes;
wchar_t lpszDisplayName[MAX_PATH];
m_strFullPath = "C:\\HOGE\\PUNI";
StringToWideChar(m_strFullPath, lpszDisplayName, MAX_PATH);
hRes = Form1->m_pDTFolder->ParseDisplayName( NULL, NULL, lpszDisplayName, NULL, &m_pIDL2, NULL);
// マイコンピュータのIDリスト
SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &m_pIDL1);
これに対し
ttp://www.kab-studio.biz/Programing/Codian/ShellExtension/06.html のConcatItemIDをそのまま使って
pIDL = ConcatItemID(m_pIDL1, m_pIDL2)
のような形になっております
GetUIObjectに渡すItemIDListは、基本的にSingle-Levelでないとだめ。
Desktopをつけるのが余計なんでしょうか? それともファイルのIDリストのm_pIDL2から末尾を取るという事でしょうか? Desktopをつけなくても、 マイコンピュータからのフルIDLISTが入手できるみたいで 挙動は変わりませんでした 末尾だけをGetUIObjectOfに渡したら フォルダの場合メニューが出るけど、正しく実行されない (どうやらデスクトップフォルダ+ファイル名になってるみたい) ドライブの場合は妙に寂しいメニューしか出ない って感じで、かなり困ってます。。。
ITEMIDLIST* pIDL = ::ILCreateFromPathW(L"C:\\HOGE\\PUNI"); const ITEMIDLIST* pIDLSingleLevel = ::ILClone(::ILFindLastID(pIDL)); ::ILRemoveLastID(pIDL)); IShellFolder* pDesktop; IShellFolder* pFolder; IContextMenu* pContextMenu; ::CoCreateInstance(CLSID_ShellDesktop, NULL, CLSCTX_INPROC, IID_IShellFolder, (void**)&pDesktop); pDesktop->BindToObject(pIDL, NULL, IID_IShellFolder, (void**)&pFolder); pDesktop->Release(); pFolder->GetUIObjectOf(hwnd, 1, &pIDLSingleLevel, IID_IContextMenu, NULL, (void**)&pContextMenu); pFolder->Release(); なんか(); pContextMenu->Release(); ::ILFree(pIDLSingleLevel); ::ILFree(pIDL); 大体こんな感じ。
GetUIObjectOfはデスクトップを使えばいいってわけじゃなかったのね 本当にありがとう、なんとかうまく表示されるようになりました ・・・これからIContextMenu2 との戦いっす、ふみゅー
テキストボックスとそれの名前(項目名)で100個近くに コントロールを画面に貼り付ける予定なのですが 座標指定でなにかいい案はありませんでしょうか。 ちょっとずれたらすべて修正なんて気が狂いそうです。
>>744 その実装を考え直すことを勧める
リストビューを使うとか、他に方法はあるだろ?
>>744 リソースエディタを使わずに、CreateWindow()でセコセコと生成するとか。
>>746 多分それが正解だろうな
描画位置とかサイズとかをdefineしておけば変更も簡単だし
745が正解だよ。
クライアント側から「テキストボックスで」という指定があるという可能性も否定できないかもしれない
そんな仕様を呑むのがどうかしている。
EDIT*100(/2か?)は止めたほうがいいな。 リソースに対して優しくない。UIとしても。 それはそれとして、表計算ソフトからジェネレートできるようにすりゃいいだけな気もするが
>>744 リソーススクリプトを手動で修正するとか。
DialogBoxIndirectとかCreateDialogIndirectを使うとか
リソースエディタを外部から操作するプログラムを作れ。
リソースを外部から操作するプログラムならいくらでもあるが……。
一枚のダイアログに載せられるコントロールの数って上限無かったか? 昔、VBで自滅してた奴がいたがw 128個位でダイアログが出なくなったような。 Win32 は関係ないのかな? あと、100個もコントロール載せるとダイアログが出てくるまで時間が掛かる、 ウィンドウの再描画にも時間が掛かるよ。 自分で表を書いておいて、指定のセルを編集時にテキストボックスを セルのサイズで作って出すのが、綺麗だと思う。 Excel とかがやってる方法だけど… ちと工数が掛かりすぎるかな?
NT系でもリソースは無限じゃないしね。
DHTMLダイアログ使えよ、エディットの100個や200個屁でもない
またバカが一人
世界の真ん中に立つ塔は楽園へ続いているという そして、またバカが一人
761 :
デフォルトの名無しさん :04/10/20 08:26:31
>>761 とりあえず引数の確認とGetLastError()
>>761 ついでにResourceHackerとかで実行ファイルのリソース確認しとき。
念のため。
>>761 ∀・)っMAKEINTRESOURCE( MYBMP );
767 :
デフォルトの名無しさん :04/10/20 14:20:56
CDドライヴに空の状態から CD が挿入されたことを検知するための メッセージというのはないのですか?
文字の大きさを変更する関数ってありますでそうか。 すみません。初歩的な質問で。 色はSetTextColorで変更できたのですが・・・。
あります。
うそです。ありません。
CreateFont(Indirect)の時にしか文字の大きさは選べない。
>>768 メモリデバイスコンテキストに書いて、ストレッチブリットするのじゃだめ?
>>772 書いてからStretchしたらギザギザになんね?
大きく描いてから縮小すればいいんだYO
SetStretchBltModeも忘れるなよ
>>767 WM_DEVICECHANGE
CD-ROMドライブのプロパティで、
自動挿入をオンにしておく必要があるが。
>>762 GetLastError()で取得したエラーコードをFormatMessage()で変換してみたところ、
「指定したリソース名がイメージファイルに見つかりません。」
と出ました。
でも「猫でも〜」や他所で見かける例だと、この手順で問題なく読み込んでくれるはずなのですが…。
ResourceHackerは敷居が少し高そうですので、もう少し慣れたら触ってみることにします。
レスありがとうございました。
>>764 MAKEINTRESOURCE( MYBMP )としてみましたら呆気なく表示されました。
実際はただキャストしてるだけのようですが、なぜこれで上手く行くのでしょうか…。
ちょっと考えてみます。
レスありがとうございました。
779 :
デフォルトの名無しさん :04/10/20 20:35:03
IEのファイルダウンロードのダイアログを同等のものを 表示させたいのですが、どのAPIを使えばよいのでしょうか? 「開く」「保存」「キャンセル」のボタンがあるやつです。 また、上書き確認のダイアログの表示方法もありますか?
ハードウェアの安全な取り外し を行うのはAPIでできますか? できるとしたらどうすれば。
>>779 GetOpenFileNameとかGetSaveFileNameとかかな。
しかるべきフラグを渡せば、上書き確認とかもできる。
>>778 リソースの識別子は "" で囲った文字列形式と
数値形式の2通りがあるんです。
>>778 さんは数値形式でリソースを作成したのでは?
LoadImage 等の関数は文字列形式を必要とするので、
MAKEINTRESOURCEマクロでキャストする必要があります。
OSはたぶん、渡された文字列ポインタの値をみて、
もし上位ワードが0x0000ならば、
それは文字列ではなく数値をキャストしたものである、
と判断しているのでしょう。
>>780 APIを徹底的に調べればわかるんでないの?
>>780 やったことないので知らないけど
SetupDi〜のAPI調べるといいかも
SetupDiRemoveDeviceとかなんか怪しげ
コモンコントロールのアップダウンで 下限の次を上限に、上限まで行ったら下限に行くように ループさせたいのですが、特別なオプションってありませんでしょうか
>>785 MSDNのUp-Down Control Stylesをよく見ろ。
ドロップダウン型のコンボボックスで リスト部分のウィンドウハンドルを取得する方法はないでしょうか。 GetComboBoxInfo とかだとNULLが返って来ちゃうんですよね。 お昼過ぎからずーっと探してるのですが……。 どなたかご存じでしたらご教授ください。
COMBOBOXINFOを初期化してないんじゃないの? 特にcbSize
>>788 cbSizeを設定しておく必要があったのですか!
わぁ、動いた。動きましたorz
……うわー、俺の午後ってー!
ありがとうございました(深々礼
DLLの関数の呼び出し規約がcdeclかstdcallか、を、 ヘッダファイルや、ソースファイルが、無くても知る方法ありますか? たとえばdumpbin.exeなどでDLLをダンプしたらわかりますでしょうか??
>>791 見当がつくこともある。
#と答えておこう。
>>790 プラットフォームSDK GetComboBoxInfo関数 のページは見たのですが……
後は、COMBOBOXINFO構造体のページとかは。
まだ始めたばかりでセオリーとか分かってなくて、申し訳なかったです。
俺のうぐいすが化け化けなのはなぜですか?(;_;)
>>793 >Pointer to a COMBOBOXINFO structure that receives the information.
>Note that you must set COMBOBOXINFO.cbSize to sizeof(COMBOBOXINFO) before calling this function.
こう書いてなかった?
>>792 791です、dumpbin /exports したけど、さっぱり見当がつきません。
どのあたりが見分けるポイントなんでしょうか。
(なかばアキラメモードです....)
スタックを覗いてみるとか
>>798 791です。
あ、なるほどね。スタックの積み順を調べたらいいんだぁ。
800 :
779 :04/10/21 23:05:14
ファイル保存のダイアログを出さずに、 ファイルの上書き確認ダイアログを表示させたいのです。 あとダウンロードの確認ダイアログはどうするのでしょうか? 次の場所からファイルのダウンロードするように選択しました。 「このファイルを上記の場所から開く」 「このファイルをディスクに保存する」というダイアログのことです。 簡易ブラウザを作っていてなにかダウンロードするときに このダイアログを出そうと思っています。
>>796 > hwndCombo コンボボックスのハンドルを渡します。
> pcbi 情報を受け取るCOMBOBOXINFO構造体へのポインタを指定します。
なるほど、MSDN Japanの方だけじゃ情報不足なんですか。
わかりました、今度からはそっちも見に行くようにします。
どうもありがとうございましたです(礼
>>800 前者は MessageBox( hWnd, "上書きするよ?", "確認", MB_OKCANCEL | MB_ICONWARNING ); でええやろ。
修飾された関数名の前に"_"、後ろに"@"がつくとstdcallなのだと思うけれど これはextern "C"限定の命名規則なのかしらん
そこでハンド逆アセンブルですよ。
>>802 UIが統一されていないのであまり気が進まないけど。
用意されててもいいような気がするんだけどないのかなー?
>>800 OPENFILENAME
OFN_OVERWRITEPROMPT
↑質問文をよく読まないせっかち君
808 :
デフォルトの名無しさん :04/10/22 16:07:17
CGIの出力をプログラムで取得したいと思い、InternetReadFileを 使用したのですが、出力ではなくCGIのソースそのものが取得されてしまいました。 CGIの出力を取得するのは無理なんでしょうか?
CGI側のサーバ設定がおかしい。 もしくは何か勘違いしている。
>>808 ブラウザで開いてみそ。
あと、ココとかのURLを入れてみそ。
それでもCGIのソースが出るようだったら、大発明。
脆弱性発見でつか?
>>803 extern "C"をつけていなくても、stdcall関数なら当然、stdcallの修飾(前に"_"、後ろに"@"そしてプッシュするサイズ)は付く。
ただし、C++の修飾を先にしたものにstdcallの修飾がなされる。
誰か回答をくれー!
ビットマップのパスだけが分かっているとき、画像を表示させるにはどうすればいいですか?
>>817 LoadImage()では表示は出来ません。
ShellExecuteEx
>>819 ありがとうございます。確かに表示出来ました。
WritePrivateProfileStringW で設定を保存してもUNICODEで保存されないのって仕様ですか? 何のためのワイド文字版APIなの??
>>821 UNICODEにしかない文字を書き込んだらどうなる?
A2Wを呼び出す手間を軽減するためのW版だろ
>799 積み順じゃなくて、クリアの方法を見ること。 積み順は cdecl も stdcall の同じ。
>>822 「????」とかに変換される。
唯一のメリットといえば、UNICODE使ったファイル名でもアクセス可能だということだけ…。
でも、*.regファイルなんかは、iniファイルと同じフォーマットでUTF16LEなのに、regedit.exeはAPI使わずに
アクセスしてんのかな?
>>825 Unicode版のAPIで.iniファイルに書きこんだら
Unicodeで保存されるべき…。
なるほど、そういう発想はなかったな。
まあ、いろんなアプリがひとつの.iniファイルに
アクセスする可能性があるし、過去との互換性も考えると
ANSIで保存されるのは仕様なんでしょう。
.regファイルの件は何が疑問なのかよく分からない。
>>825 Dependency Walkerで調べたところ、GetPrivateProfileStringW()を直接呼び出すことはしてなさそうだ。
オーナードローボタンを複数画面に表示し、 それぞれ別のビットマップを貼り付ける方法を教えてください。
>>826 .regを読むのに*Profile* APIを使ってるはずだと思ってるんでしょ。
830 :
デフォルトの名無しさん :04/10/23 23:48:52
みんなやってそう、かつ簡単そうで難しい、(完璧ではない) 文字処理
>>821 なに? WritePrivateProfileStringW 使って
引数にUNICODEの文字列を指定して
書き込んだらSJISに変換されて書き込まれるの?
まさか、引数にSJISの文字列を指定して書き込んでも
UNICODEに変換されないとか言っているわけじゃないよね?
( ゚д゚)ポカーン
16ビット時代の遺物なんだからUnicode対応なんかしてないよ。 レジストリ使うか自前でやれ
同じファイルに読み書きするのにAPIのインターフェイスがAかWかで文字コードが変わったら使い物にならんやん
WM_ACTIVE site:microsoft.comでググっても何も見つからないのですがこれはWM_ACTIVEは使うなという事ですか?
>>833 レジストリも結局は一緒じゃないか?
REG_SZ型は全てUnicodeで保存されてるはず。
ユーザが意識しなくてもいいことじゃないの?
WM_ACTIVATE
噛み合ってません
要するに *Private* AでもWでもファイルはSJIS レジストリ AでもWでもファイルはUnicode 結論 AでもWでも同じファイルを使えるように設定された仕様 ということでFA?
プロパティページについてなんですが、CreatePropertySheetPageが失敗したとき PROPSHEETPAGE::pfnCallbackで指定したコールバックは呼ばれるのでしょうか? lParamにページで使うメモリを持たせ、コールバックのPSPCB_RELEASEで解放するようにしています。
>>841 呼び出し元で確保したら呼び出し元で開放するのが基本じゃないか?
>>842 DLLからアプリ側にHPROPSHEETPAGEを渡すので
解放するタイミングがコールバックしかないのです。
GetCharWidth32でU+10000以降の文字幅を取得できないのは仕様ですか?
846 :
デフォルトの名無しさん :04/10/24 22:53:25
FindFirstFile とかで、ディレクトリツリーを辿るプログラムで、ディレクトリのシンボリックリンクを 辿らせないようにするにはどうすればいいのか教えてください偉い人。
CreateWindowでEDIT(テキストエディタ)を作成し 入力を整数又は小数点にしたいのですが 整数はES_NUMBERで実現できました。 しかしながら整数だけの入力にしてしまいますと 当然ながら少数点の入力ができません。 整数と少数に入力を制限できる方法ってありますでしょうか。
>>846 興味本位で訊くんだけど、NTFSはディレクトリのシンボリックリンクを作れるの?
849 :
デフォルトの名無しさん :04/10/25 00:34:36
>>848 呼称は違うけど、ほぼ同等なものが作れる。
\\相手のPC\共有フォルダ名 みたいなパスをFindFirstFileで検索掛けると "ファイルが見つかりません"というエラーが返却されるんですけど、 本当にファイルがないか、それとも、ネットワーク共有名かを判断するAPI ってないですかね?
851 :
デフォルトの名無しさん :04/10/25 01:03:00
>>850 少なくとも、
\\127.0.0.1\SharedFolder\*
とかだと検索できるけど。
>>852 PathIsUNCですかね?
なんかいけそうです。有難う御座います。
うんこネタ禁止
スピンコントロールの内容を変数にゲットしたいのですが GetWindowTextやGetDlgItemTextでは取得できませんでした。 スピンコントロールをゲットできる関数ってありますでしょうか・・・。m(_ _)m
MFCのCSpinButtonCtrl::GetPos()のソースを見てみるとか。
859 :
デフォルトの名無しさん :04/10/25 10:59:32
MACアドレスを取りたくてGetAdaptersInfoを使ったのですが、 IEEE1394のアドレスだけ取れませんでした。 そういうものなのでしょうか。 getmac.exeとipconfig.exeの出力結果も違うし、ググっても 情報が全然ないしで困りました。
>856 ちなみにスピンコントロールは、アップダウンコントロールと エディットコントロールの組の事。 856 が GetWindowText で得ようとしたのは アップダウンコントロールの方のテキストだろうな。
862 :
デフォルトの名無しさん :04/10/25 15:39:42
Windowsコントロールの標準のポップアップメニューにメニュー追加はどうやりますか?
863 :
デフォルトの名無しさん :04/10/25 16:13:50
GetSystemTime()で世界協定時刻(UTC)を取得しているのですが このAPIで取得出来る時刻はどの程度信頼性のあるものなのでしょうか? ユーザが簡単に調整など出来ないようになっているものなのでしょうか?
>>863 コントロールパネルの「日付と時刻」を開いてごらん。
865 :
デフォルトの名無しさん :04/10/25 16:30:37
>>864 日付と時刻のプロパティが出ました。
これに何かあるのでしょうか?
>>863 GetSystemTimeは世界協定時刻(UTC)を取得する関数ではありません。
システム日時をUTCに換算して取得する関数です。
信頼性は、PCの時刻に依存します。
ユーザが、PCの時刻を操作できる権限を持っていれば、変更される可能性があります。
867 :
863 :04/10/25 16:42:00
>>866 という事は殆ど当てにならないという事ですね…
厳密に取得するには、(UTC)が取得できる
信頼性のあるサーバから取ってくるしかないという事ですか。
>>867 Windows NT 系だったら、タイムサーバーにアクセスして
時刻を正確に調整してくれるように設定できるよ。
まあ、それもユーザー(あるいは管理者)に任されているわけだけど。
企業内の大きなLAN であれば、タイムサーバー置いてるでしょう普通。
869 :
デフォルトの名無しさん :04/10/25 19:48:28
>>869 #defineIDB_BUTTON1100;
このセミコロンを削除しましょう。
windowsプログラミングでスクロールバーを扱う関数にSetScrollRange(hwnd,iBar,iMin,iMax,bredraw)という説明があったのですが 第2引数のiBarにはSB_VERTかSB_HORZを指定するとだけ書いてあり、これらがどういう意味を持つのかさっぱりわかりません。 この二つは何が違うのでしょうか?
>>871 SDK のドキュメント読めばわかるから。
MFCのデータしか出ないのですが。。
ms-help://MS.PSDK.1033/shellcc/platform/commctls/scrollbars/scrollbarreference/scrollbarfunctions/setscrollrange.htm
877 :
デフォルトの名無しさん :04/10/25 20:50:35
>>877 違う。
あと日本語版のヘルプは肝心な記述が抜けてたりするんで、雰囲気だけ掴むだけにしとけ。
880 :
871 :04/10/25 21:04:12
英語版でようやくたどりつけました。。 MSDNは英語版のほうがよろしいんですかね〜? なかなかAPIを検索しようにもMFCばっかりで。。
つーか、縦か横かって話だけだろ?
MFCも結局はAPI呼んでるから見て損はないと思う。
それに
>>871 は引数から言ってMFCじゃないのか?
あとAPIのSetScrollRangeは使うなっていうことだぞ
883 :
デフォルトの名無しさん :04/10/25 21:55:51
>>882 プログラミングwindowsという本に載っていた関数なのでAPIだと思うのですが。。MFCなのですかね。。??
MFCで引数がhwndってあまり無いわけだが。
SB_VERT SB_HORZでイメージわかないようだと英語は厳しいだろ。
自分のウインドウがアクティブになっていなくても、 あるキー(たとえばF1等)が押されたときにそれを感知するにはどうしたらいいですか?
キーロガーでも作りたいのか?
ほっときー
監視員をつける
グローバルフックを使う。DLLを作成しる
>>888 Hot keyってコモンコントロールだったんですか……。
これを使ってみます。
コモンコントロールのホットキーは違うと思う。
力業でGetAsyncKeyStateとか
フックだと監視できても変更できないしなぁ・・・。見てるだけ。orz
デスクトップのショートカットキーと同じようなもので良いのなら、 WM_HOTKEYを使う。 フックなら変更も可能。
>>896 WH_GETMESSAGE の場合だけ?
Cygwinのフォルダが消せず、フルコントロールできるのがシステムになっていたので 与えられたフォルダのパス以下を全て削除するようなプログラム書きたいんですが システム権限で動くようにするにはどうしたらいいんでしょ?
以下のキーに実行ファイル名を入れてマシンを再起動。SYSTEM権限で実行されるので注意。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run もしくは、 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
>>899 ありがとうございます、さっそくコード書いて試してみます。
901 :
でき :04/10/26 08:51:30
すいませんが、どなたか、VB.netにてwin2000、winXPの端末がコンピュータロック中か取得する方法をご存知でしょうか? (APIを利用してできるのではと思いこちらに質問しました。)
902 :
デフォルトの名無しさん :04/10/26 09:50:31
いま動いてるプロセスを管理するような関数ってある? いくらリファレンスとか WWW の検索かましても これといったのがないんだけど とくに各プロセスのファイルアクセスの情報を見たいんだけど
ない
904 :
902 :04/10/26 10:40:42
例えばタスクマネージャに使ってる関数てどんなの?
タスクマネージャにファイルアクセスのログなんてあったっけ
906 :
デフォルトの名無しさん :04/10/26 10:46:09
>>905 いやファイルアクセスのことはとりあえず置いといて
最終的に本当にしたいのはファイルとプロセスの関係なんだけどね
>>902 NT系ならAPIでファイルハンドルの保持状況を見れないことはないが、フックしたほうが簡単。
API フックのこと? メッセージフックじゃファイルアクセスを監視できないと思うけど。
漏れも linux の fuser みたいなの欲しいけど、簡単な方法はないんじゃない? かの sysinternals の FileMon でも VxD 使ってフックかけてるし。
910 :
902 :04/10/26 11:02:40
あそうそう まさに filemon みたいなことがしたいわけよ あれ,どうやってんの? 詳しく詳細きぼん
912 :
デフォルトの名無しさん :04/10/26 11:04:49
>>911 つーかその動作原理を知りたいのさ
そのサイトに何か書いてあるん?
>>901 「コンピュータロック中」ってどういう状態?
>>912 見に行きゃいいじゃん。そもそも>909にVxD使ってるって書いてあるし。
”How FileMon Works”以下に必要な情報へのリンク等があるみたいです。 Windows "handle table" あたりでググルと別方向からの情報も見つかると思います。 簡単だけれども酷いやり方としては、先方のプロセスにコードをinjectして、 0x0000〜0xFFFFあたりを NtQueryObject で調べてみるとか。
>そのサイトに何か書いてあるん? 書いてはあるけど、IFSMGR は SDK が高いので簡単には使えないですね。 しかし酷い態度。相手にするんじゃなかった・・・
ちょっとでも礼が言えないヤツなんだな
918 :
でき :04/10/26 11:57:34
>>913 「コンピュータロック中」とは「Alt」+「Ctrl」+「Del」をおしてするコンピュータロックのことです。
OpenInputDesktopでwinlogonデスクトップがアクティブかどうか調べる
丁寧な文体でない質問には答えない。これが後悔しないコツ。
>>920 文体が丁寧なだけで中身が無いよりも、
必要な内容が全て含まれている崩れた文体の方が好ましい。
そもそもこっちが勝手にレスしてるんだから 相手の態度がどうであれ関係ないか、 と考え直しますた。
理解しようとする気がない奴には答えない。これが後悔しないコツ。
皆さん、教えてもらったら「ありがとう」といいましょう。 善意で答えてくださっているのですから、横柄な質問はやめましょう。
>>921 ここに居るだけで傷ついてる人はいるけど
そりゃ問題外
>>896 RegisterHotKey()で登録したホットキーを無効にするにはどうすればいいんですか?
ん? ヘルプ見たらRegisterHotKey()のすぐ横にあるだろ
初心者にまず教えるべきことはMSDNの見方だと思うんだよね。
礼儀だろ
カラテカを100回クリアできるまでは初心者
……見落としていましたOrz
タブを使ったチャットソフト作ろうとしているんですけど、タブ を切り替えるときに表示内容を変更する場合、表示内容をロード して(文字位置や、フォントサイズなど)表示を切り替えるのと、 タブごとに異なるビューが存在し、タブを押すことによって表示 が切り替わるのが思いつくんですが、後者のほうは簡単にできる でしょうか?前者はあまりにも保持しておく情報が多そうなんで なんかスマートじゃない感じがします。
すいません。教えてください。 CreateWindowで作ったウインドウを親ウインドウとして、CreateDialogで ウインドウにダイアログを貼り付けています。 このダイアログ内のボタンに”標準のボタン”を設定し、見た目は外枠?の ついた標準のボタンになっているのですが、エンターを押しても実行されません。 マウスでクリックすれば実行できます。 フォーカスとかそういう問題なのでしょうか?
>>937 私ならダイアログをはっつけるね。
>>938 そういう問題でしょう。恐らくは、はっついたダイアログにフォーカスが来てないのかと。
>>938 エンターの押し下げはモーダルダイアログ用のダイアログプロシージャによって実行されます。
モードレスダイアログでは機能しません。
>>940 つまり、ウインドウにモードレスダイアログを貼る方法の場合は、
通常のエンターでのボタン押下はつかえないということでしょうか?
もしどうしても実行したいのであれば、自分でキーイベントを拾う??
IsDialogMessageをメッセージループに組み込む
>>942 ありがとうございます。
今は環境がないので後日試してみます。
SHQueryValueExとRegQueryValueExの違いはなんでしょうか? MSDN見たところどちらも違いがないように思えるのですが。
Photoshopのレイヤー情報表示部分のような、ペイントソフトに良くある 下記のコントロールはどの様に作るのでしょうか _______________________ |★ ◎ レイヤー1. | |★ ○ .////////. | ←フォーカス時の反転は文字の部分(=レイヤーxx)のみ |☆ ◎ レイヤー3. | | | ★や◎はアイコンで、クリックすると状態が☆や○に変わる | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ オーナードローかカスタムドローのリストビューかなとは思うのですが、 反転部分が文字部分だけというのが引っかかります。 VCLに似たような物があるとも聞いたので、もしかしたら何か 既成のコモンコントロールがあるのでしょうか? spy等で調べてみたいのですが、自分ではPhotoshopを持って無く、 また学校のPCにexeを入れると非道く怒られるもので…ひとつよろしくお願いします
Photoshopは確かすべて自前描画のコントロールだったと思うのですが。 Macと共通のインターフェイスですし。
>>945 >spy等で調べてみたいのですが、自分ではPhotoshopを持って無く、
>また学校のPCにexeを入れると非道く怒られるもので…ひとつよろしくお願いします
何の学校かにもよるだろうけど、勝手にインストールするんじゃなくて、
目的を伝えて必要性を説明すれば怒られることはないと思われます。
もちろん断られるかも知れませんが。
もしプログラミング技術等を教える学校でありながらそれを断られるようなら、
選んだ学校を間違ったと思ってあきらめよう。
>>946 ぜ、全部自前ですかぁ…。なるほどマルチプラットフォーム。
あれと同じ物を作るのは…気が遠くなりそうですが覚悟を決めることにします。
>>947 あはは、Photoshop入りのPCが他学部の端末な事もあって、
怖じ気づいていました。確かに勉強事に奥手になっちゃ駄目ですね。
お二人ともレスありがとうございました。
>>916 > >そのサイトに何か書いてあるん?
大阪っぽい
チェックボックスの背景色を灰色から変更したいのですが、無理でしょうか。 SetBkColorでは無理でした。。
出来ます。
WM_GETCTLCOLOR*かな?
最近、興味のある質問がめっきり減った。
ちと古いホトショップだけど PSFloatCとかPSViewCとか独自コントロールかな? WM_USER+αが飛び交っておりました
>>952 WM_GETCTLCOLOR*は存在しませんでしたが、ここら辺調べ見ます。
ありがとうございまいました。
スマソ ちょっと質問でつ VB6で長時間稼動(多分100日とか連続でうごきっぱ)するシステムに 時間を計る部分があって、そこでTimegetTimeのAPIを使用しています。 しかし、ここで、TimegetTimeは連続である一定以上動かないのは周知の事実なのですが、このAPIが返す値が32Bit(VBのLong)を超えた場合、どのような動きになるのでしょうか? テストするのが一番かとも思うのですが、そこまで時間に余裕がありません。 よろしくお願いいたします。
0
おぉ、ありがとうございます〜 まさかLongの最小値から始まる事は無いと思ってたんですが これで対策が取れそうです ありがとうございました〜