■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
Win32API質問箱 Build32
751
名前:
デフォルトの名無しさん
:2005/06/20(月) 11:41:29
>>748
http://www.c3.club.kyutech.ac.jp/~sukiyaki/
752
名前:
704
:2005/06/20(月) 16:25:52
>>741
別に705さんのせいとか思ってませんよ、ホントに。
質問の仕方が悪かったですか…どうも申し訳ありませんでした。
>>746
テーマのフォントはGetThemeFont(もしくはGetThemeSystemFont)で
取得できることは突き止めました(
>>727
)。
>>747
PlatformSDKにはご指摘の関数は見つけられませんでした。
もう少し掘り下げて調べてきます。ありがとうございます。
目的
Themeのフォント、色、効果を使ってテキストを描画したい。
(DrawThemeTextが該当すると思われる)
問題点
DrawThemeTextをMSDNのSample通りに記述しても期待した
目的の動作を行わない。
1.フォントの取得 -> GetThemeFontで解決
2.色の取得 -> おそらくGetThemeColorだが必要なのか?
3.DrawThemeTextで描画するとフォントのサイズ、色が一致しない
ということなのですが…、スレ違いとかアドバイス等ご指摘がありまし
たら少しご教授して頂きたかっただけです。申し訳ありませんでした。
753
名前:
デフォルトの名無しさん
:2005/06/20(月) 18:28:51
iniの操作をしたいんだけどどうしたらいいの?
754
名前:
デフォルトの名無しさん
:2005/06/20(月) 18:32:14
GetPrivateProfile○○
WritePrivateProfile○○
755
名前:
デフォルトの名無しさん
:2005/06/20(月) 18:32:29
http://www.google.co.jp/search?ie=UTF-8&oe=UTF-8&sourceid=deskbar&q=ini%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB+Win32API
つか大抵は言語ごとに使いやすいライブラリがあるからそれ使え
756
名前:
デフォルトの名無しさん
:2005/06/20(月) 18:33:09
>>753
iniファイルのことなら{Get|Write}PrivateProfile*()
757
名前:
デフォルトの名無しさん
:2005/06/20(月) 19:35:47
>>754
>>756
ありがとうございます
758
名前:
デフォルトの名無しさん
:2005/06/20(月) 20:10:08
背景が透明な文字を表示したいのですが、
どうすればいいでしょうか?
759
名前:
デフォルトの名無しさん
:2005/06/20(月) 20:19:18
>>758
せっとばかもーど
760
名前:
デフォルトの名無しさん
:2005/06/20(月) 20:22:23
SetBkMode
761
名前:
デフォルトの名無しさん
:2005/06/20(月) 21:33:02
>759-760
dクス
762
名前:
デフォルトの名無しさん
:2005/06/20(月) 23:13:18
>>752
もうあきらめろ、ここにはおまえの質問に答えれるやついないぞ。
おまえもそこまでやって無理なら別のアプローチを考えるかMSに
聞くしかないだろ。
763
名前:
デフォルトの名無しさん
:2005/06/20(月) 23:58:00
>>777
Advanced Windows 嫁
764
名前:
デフォルトの名無しさん
:2005/06/21(火) 00:00:21
×答えれる
○答えられる
765
名前:
デフォルトの名無しさん
:2005/06/21(火) 00:55:58
巣に帰れ
766
名前:
デフォルトの名無しさん
:2005/06/21(火) 01:02:13
>>764
今時「ら抜き言葉」に目くじら立てるなんて。
年がばれますよ。
767
名前:
デフォルトの名無しさん
:2005/06/21(火) 01:09:39
ジオボタンにベルを付けたときのメッセージハンドについて教えてください。
768
名前:
デフォルトの名無しさん
:2005/06/21(火) 01:58:52
>>767
WM_SETTEXT
769
名前:
デフォルトの名無しさん
:2005/06/21(火) 05:22:04
二十歳前だけど答えれるはさすがに無いな
770
名前:
デフォルトの名無しさん
:2005/06/21(火) 06:26:29
>>759
あれをばかもーど言うヤツ初めて見た
771
名前:
デフォルトの名無しさん
:2005/06/21(火) 06:34:17
自分が使っているWindowsXP SP2を対象OSとします
文字コードは内部ではUNICODEを使っているそうですが、
ファイル名やディレクトリ名、クリップボード、main()のargv、
標準入力や標準出力などをプログラムで得ると、
UNICODEで得られるのでしょうか?
2バイト目に¥があって云々という話は 9x 系だけでしょうか?
772
名前:
デフォルトの名無しさん
:2005/06/21(火) 07:00:59
>>771
プログラム側もUNICODEに対応していないといけない。
NT系は何でもUNICODEが使えるが、9x系ではAPIにほとんどUNICODEが使えないから。
そこでUNICODEが#defineで定義されているかどうかで切り替える仕組みがあってコンパイル時にどうするかを決められるようになっている。
クリップボードはUNICODE切り替えとは無関係にCF_UNICODETEXTを指定すればいい。UNICODEテキストじゃなくても勝手に変換してくれる。
標準入出力はAPIでやればUNICODEで入ってくる。ほかにもC/C++のワイド文字入出力も使える。
ただしこっちはMBCSで読み込んでからUNICODEに変換するという風になっているので9xでも使える。
773
名前:
デフォルトの名無しさん
:2005/06/21(火) 07:01:21
さぁね
俺は知らんが、デバッグモードで実際にAPIでも使ってファイル名取得して実データ見てみりゃ判るだろ
774
名前:
デフォルトの名無しさん
:2005/06/21(火) 07:03:06
>>771
別に9xでも一旦Unicodeに変換して作業して、終わったらMBCSに戻せばいいだけだよ。
775
名前:
デフォルトの名無しさん
:2005/06/21(火) 07:49:36
>>770
心でそう呟きながらコーディングしてますが何か?
776
名前:
デフォルトの名無しさん
:2005/06/21(火) 09:37:15
結局誰も704にアドバイスしてやれないんだろ(俺も含めて)
それを指摘されたからってら抜き表現がどうとか
揚げ足取りして話しを逸らそうとするのはちょっと
格好悪いと思った。
777
名前:
デフォルトの名無しさん
:2005/06/21(火) 09:58:11
↓華麗にスルー
778
名前:
デフォルトの名無しさん
:2005/06/21(火) 10:04:20
>>704
にレスしたいのだが、残念ながらWin2Kなのであります
779
名前:
デフォルトの名無しさん
:2005/06/21(火) 10:45:01
同じく
780
名前:
デフォルトの名無しさん
:2005/06/21(火) 10:52:40
残念ながらMacなのであります
781
名前:
デフォルトの名無しさん
:2005/06/21(火) 11:05:46
デバイスコンテキストハンドルからウィンドウハンドルを取得する関数ってありますか?
782
名前:
デフォルトの名無しさん
:2005/06/21(火) 11:25:51
子ウィンドウにリバーをつけることはできますか?
783
名前:
デフォルトの名無しさん
:2005/06/21(火) 16:12:40
>>781
WindowFromDC
784
名前:
デフォルトの名無しさん
:2005/06/21(火) 20:11:07
プログラムからセーフモードで起動する方法はないでしょうか。
msconfig などをみるとオプションがあるので、APIなどからできないものかと思った次第です。
InitiateSystemShutdown() や ExitWindows() などではオプションもなく、何か方法がないものでしょうか。ターゲットはWindows XPです。
785
名前:
デフォルトの名無しさん
:2005/06/21(火) 20:26:40
boot.ini書き換えればイヤでもそうなるけど、あんまりいい方法じゃ無いよな。
786
名前:
デフォルトの名無しさん
:2005/06/21(火) 21:46:29
>>774
それを自動的にやってくれるライブラリ(MSLU)もあるし
787
名前:
デフォルトの名無しさん
:2005/06/21(火) 21:53:02
率直に申し上げて、ウィンドウを固定する方法を教えてください。
お願いします。
788
名前:
デフォルトの名無しさん
:2005/06/21(火) 22:07:26
>>787
ウィンドウスタイルにWS_THICKFRAMEやWS_SIZEBOX、そしてWS_MINIMIZEBOXとWS_MAXIMIZEBOXを指定しないことから。
そしてWM_GETMINMAXINFOを処理する。位置も動かしたくなければWM_MOVINGも処理する。
789
名前:
771
:2005/06/21(火) 22:19:45
UNICODEが定義されているか否かで、たとえば
TCHAR
TEXT()
LoadAccelerators()
などが適切に切り替わる
>>772
にあるように、プログラムがWindowsから
どのように文字コードを受け取るかは
APIで決まる(UNICODEで切り替わる)
ここらへんまではわかったのですが、
リソースファイルやリソースコンパイラは
どうふるまうのでしょうか?
Makefileでは
リソースコンパイラには特にオプションなし
C++コンパイラには -DUNICODE
SJISコードのリソースファイルでは
acc ACCELERATORS DISCARDABLE
{
VK_ESCAPE, 100, VIRTKEY, NOINVERT
}
ソースファイルでは
LoadAcceleraors(hInst, TEXT("acc"))
こうやってmakeしましたが、とりあずうまくいっているっぽいです
リソースコンパイラはUNICODEでリソースを生成するのでしょうか?
790
名前:
デフォルトの名無しさん
:2005/06/21(火) 22:21:42
そう。リソースはWin9xでも常にUnicode
791
名前:
デフォルトの名無しさん
:2005/06/21(火) 22:23:00
>>788
わざわざご丁寧に位置の固定までありがとうございます。
792
名前:
デフォルトの名無しさん
:2005/06/21(火) 22:24:24
>>789
リソースはUnicodeなのだがLoadAcceleratorsの引数はTCHARで切り替わるようになっているのに注意。
793
名前:
デフォルトの名無しさん
:2005/06/22(水) 00:41:32
>>783
ありがとう
794
名前:
デフォルトの名無しさん
:2005/06/22(水) 01:04:05
>>789
本筋とは関係ないが、正確に言えばUNICODEでAPIが、
_UNICODEでTEXTマクロ類が切り替わる
795
名前:
デフォルトの名無しさん
:2005/06/22(水) 01:45:29
>>794
UNICODEでTEXTが
_UNICODEで_TEXTマクロが切り替わるみたいだけど。
前者はWindows API用で(TEXTマクロも)後者はVC++ランタイム用
796
名前:
デフォルトの名無しさん
:2005/06/22(水) 01:46:33
ということに(とても厳密に言えば)なるんだけど
TEXTと_TEXTを意識して使い分けてる人いますか?
797
名前:
デフォルトの名無しさん
:2005/06/22(水) 01:58:52
_Tってマクロもあるね
なんかこんがらがってきた
798
名前:
デフォルトの名無しさん
:2005/06/22(水) 02:15:36
普通はみんな_T()使ってんじゃないの。みじかいし。
799
名前:
デフォルトの名無しさん
:2005/06/22(水) 03:41:35
_Tも_TEXTもTEXTも使ってねぇ
800
名前:
デフォルトの名無しさん
:2005/06/22(水) 05:57:19
WinMainで
メッセージループの手前で終わるときは、
0で終了するべき、
というのが、ちょっと
if (error)
return EXIT_SUCCESS;
うーん
801
名前:
デフォルトの名無しさん
:2005/06/22(水) 13:27:23
GetLastErrorについて教えてください。
マルチスレッドの各スレッドでGetLastErrorを呼び出します。
複数のスレッドで同時にエラーが発生した場合、GetLastErrorが返す
エラーコードはスレッド単位のものなのですか?
それともプロセス内で発生した一番最後のエラーコードになるのですか?
802
名前:
デフォルトの名無しさん
:2005/06/22(水) 13:30:54
MSDN引け。ちゃんと書いてある。
803
名前:
デフォルトの名無しさん
:2005/06/22(水) 13:42:22
せっかくネタ提供してあげたのに...
もう質問してあげない
ぷんぷん
804
名前:
デフォルトの名無しさん
:2005/06/22(水) 16:49:49
あ、そ、じゃサヨウナラ
805
名前:
デフォルトの名無しさん
:2005/06/22(水) 17:55:48
>>796
こんなことをしているヘッダもあるから大丈夫。
#ifdef UNICODE
#ifndef _UNICODE
#define _UNICODE
#endif
#endif
#ifdef _UNICODE
#ifndef UNICODE
#define UNICODE
#endif
#endif
806
名前:
デフォルトの名無しさん
:2005/06/24(金) 05:16:31
指定したスレッドが使っているスタック領域の範囲を知る方法ってありますか?
807
名前:
デフォルトの名無しさん
:2005/06/24(金) 06:52:58
>>806
レジスタを見るとか?
808
名前:
デフォルトの名無しさん
:2005/06/24(金) 09:23:31
使ったこと無いけどGetThreadContextとか?
809
名前:
デフォルトの名無しさん
:2005/06/24(金) 09:52:27
>>732
,737
IME半透明の件 ありがとうございました
解決しました
呪いの貞子で気づかず読み飛ばしていました・・・
申し訳ない
810
名前:
デフォルトの名無しさん
:2005/06/24(金) 10:03:57
>>806
x86 32bit版Win2K以降。自プロセスならスレッドハンドルとるの楽だろうからWin98でもできるだろ。
エラー処理はてめーでやれ。ポインタとDWORD混合してるのはほっとけ。
void GetStackArea
(DWORD dwProcessID, DWORD dwThreadID, LPDWORD pdwHigh, LPDWORD pdwLow)
{
typedef HANDLE (WINAPI *OPENTHREAD)(DWORD, BOOL, DWORD);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
HANDLE hThread = OpenThread(
THREAD_GET_CONTEXT | THREAD_QUERY_INFORMATION, FALSE, dwThreadID);
CONTEXT ctx = { CONTEXT_SEGMENTS, 0 };
GetThreadContext(hThread, &ctx);
LDT_ENTRY ldt = { 0 };
GetThreadSelectorEntry(hThread, ctx.SegFs, &ldt);
DWORD dwTibPtr= (ldt.HighWord.Bytes.BaseHi << 24)
| (ldt.HighWord.Bytes.BaseMid << 16)
| (ldt.BaseLow) + 0x18;
DWORD dwReadBytes = 0, dwTIBAddr = 0, dwStackArea[2] = { 0, 0 };
ReadProcessMemory(hProcess, (LPBYTE)dwTibPtr,
&dwTIBAddr, sizeof dwTIBAddr, &dwReadBytes);
ReadProcessMemory(hProcess, (LPBYTE)dwTIBAddr,
dwStackArea, sizeof dwStackArea, &dwReadBytes);
CloseHandle(hThread);
CloseHandle(hProcess);
*pdwHigh = dwStackArea[0];
*pdwLow = dwStackArea[1];
}
811
名前:
デフォルトの名無しさん
:2005/06/24(金) 10:35:28
すまん、さっきのはなしだ。こっち使ってくれ
void GetStackArea
(DWORD dwProcessID, DWORD dwThreadID, LPDWORD pdwBase, LPDWORD pdwLimit)
{
typedef HANDLE (WINAPI *OPENTHREAD)(DWORD, BOOL, DWORD);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
HANDLE hThread = OpenThread(
THREAD_GET_CONTEXT | THREAD_QUERY_INFORMATION, FALSE, dwThreadID);
CONTEXT ctx = { CONTEXT_SEGMENTS, 0 };
GetThreadContext(hThread, &ctx);
LDT_ENTRY ldt = { 0 };
GetThreadSelectorEntry(hThread, ctx.SegFs, &ldt);
DWORD dwTibPtr= (ldt.HighWord.Bytes.BaseHi << 24)
| (ldt.HighWord.Bytes.BaseMid << 16)
| (ldt.BaseLow) + 0x18;
DWORD dwReadBytes = 0, dwTIBAddr = 0, dwStackArea[2] = { 0, 0 };
ReadProcessMemory(hProcess, (LPBYTE)dwTibPtr,
&dwTIBAddr, sizeof dwTIBAddr, &dwReadBytes);
ReadProcessMemory(hProcess, (LPBYTE)(dwTIBAddr + 4),
dwStackArea, sizeof dwStackArea, &dwReadBytes);
CloseHandle(hThread);
CloseHandle(hProcess);
*pdwBase = dwStackArea[0];
*pdwLimit = dwStackArea[1];
}
812
名前:
デフォルトの名無しさん
:2005/06/24(金) 10:41:39
あと、補足すると、コミットされた分のスタック領域しかとれないので
スタックオーバーフローするリミットがどれだけか知りたい場合は
VirtualQueryEx で MEM_COMMIT されつつ PAGE_NOACCESS 保護の領域探して鯉。
ここらへんはアド嫁
813
名前:
デフォルトの名無しさん
:2005/06/24(金) 16:15:57
タブコントロールで、みんな当たり前の様に、Ctrl+TabやCtrl+PgUp/Downでタブを切り替えれてますが、あれってどうやってるんですか?
非MFCです。
814
名前:
デフォルトの名無しさん
:2005/06/24(金) 16:59:21
プロパティシートだったりして。
815
名前:
デフォルトの名無しさん
:2005/06/24(金) 17:02:42
C言語を使ったAPIを勉強しはじめたばっかの初心者です
内容の無い骨組みだけのWINDOWSプログラムを見て勉強しておりますが
インスタンスハンドルというのが いまいち分かりません
ハンドルというのはメモリアドレスのポインタなのでしょうか?
それともポインタ以外でも、メモリ上の住所のような数値があるのでしょうか?
816
名前:
デフォルトの名無しさん
:2005/06/24(金) 17:04:47
>>815
HANDLEはvoid*のtypedefだが、その内実はさまざまだ。
意味論的にはカーネルメモリなどにある何らかのオブジェクトを指し示すモノ、ということになるが、
それが実際に直接なポインタであるとは限らないし、そう仮定すべきではない。
817
名前:
デフォルトの名無しさん
:2005/06/24(金) 17:26:46
>>815
インスタンスハンドルは実行しているEXEを識別するためのものと思えばいい。
818
名前:
815
:2005/06/24(金) 17:27:00
816様、レスありがとうございます
正直、意味論的 とか カーネルメモリ とか オブジェクト とか よく分からなかったのですが
色々ややこしいもので今の段階ではなんとなくこんなもんとだけ覚えて先進む事にします
また質問ですが
return時の TRUE と FALSE についてよく分かりません
C言語を勉強していた時、return 0;で終わると正常な終了。return 0以外で終わると不正な終了
と書いて有りました。
APIを勉強していると TRUEは1 FALSEは0 と書いて有りました。
で、 return TRUE は正常な終了。 return FALSE は不正な終了っぽい文脈を見つけました。
return TRUE は正常?? TRUEは1だから return 1;と同じだから 不正???
っと混乱しております、助けていただけると助かります
819
名前:
815
:2005/06/24(金) 17:30:06
817様もありがとうございますm(_ _)m
820
名前:
デフォルトの名無しさん
:2005/06/24(金) 17:30:40
>>818
return 0;が正常ってのはmain()のことじゃね?
821
名前:
デフォルトの名無しさん
:2005/06/24(金) 17:36:29
どの値が正常で、どの値が異常かは常にMSDNで把握しろ。
型に騙されるな(w
822
名前:
デフォルトの名無しさん
:2005/06/24(金) 17:41:43
どれが正常でどれが異常かはプログラマによって書き方が違う。
main()は0が正常だが他は0以外が正常となってる場合がほとんど。
俺の関数は0やNULLが異常、1やポインタやハンドルが正常ということにしてるけど。
823
名前:
デフォルトの名無しさん
:2005/06/24(金) 17:45:13
COM関係のHRESULTだとS_OK==0だしな
まぁ、BOOLとかboolでTRUE/trueが失敗って言われたら蹴るが。
824
名前:
デフォルトの名無しさん
:2005/06/24(金) 17:47:57
IsFaultみたいなメソッドならTRUEで失敗なんだが。
825
名前:
デフォルトの名無しさん
:2005/06/24(金) 17:56:14
GetMessageみたいな関数もあるしなぁ
826
名前:
デフォルトの名無しさん
:2005/06/24(金) 18:01:56
なんにしろ固定観念にとらわれる人はプログラマ向いてないね。
827
名前:
815
:2005/06/24(金) 18:07:24
皆様ありがとうございます、とても助かりました
また質問させてください
BOOL型についてよく分かりません
GetMessage関数の際、GetMessage関数の戻り値がBOOL型になっております
BOOL型とは0か1の型だと思うのですが
GetMessage関数は関数が失敗したときに-1が返りますよね
これが分かりません。
本には、win16APIの時との互換性がどうこう書いてますが
そもそもBOOL型が-1を返せるということは、int,char,long等の基本データ形と違い
typedefで作った形とは、後からプログラムを見やすくしたり作り直したりしやすくする
ための物で、BOOL型は0か1を入れるのを推薦の形ということで
-1どころか 100とかまで 実際に入れれる範囲は広めにできている物なのでしょうか?
説明下手っぽく分かりにくいですが、宜しくお願いします
828
名前:
デフォルトの名無しさん
:2005/06/24(金) 18:10:44
BOOLの正体はint
829
名前:
デフォルトの名無しさん
:2005/06/24(金) 18:12:43
処理系によって1バイトだったり4バイトだったりする
830
名前:
デフォルトの名無しさん
:2005/06/24(金) 18:16:11
BOOLがintの代わりになるとしても信用性はかなり低いと思われ
831
名前:
デフォルトの名無しさん
:2005/06/24(金) 18:19:50
BOOLに-1を入れるM$は信用に値しないということだ
でも仕方がないのでGetMessageで-1の場合のエラー処理を書かざるを得ない
832
名前:
黒沢明「夢」風に
:2005/06/24(金) 18:23:42
こんなBOOLを見た
BOOL value;
for(value=0;value < 100;value++){
833
名前:
デフォルトの名無しさん
:2005/06/24(金) 18:32:04
intやDWORDをtypedefしただけのBOOL
=信用性高いがわざわざそれ使う意味がない
0と1の二つを入れる上で最小限の領域だけを準備したBOOL
=信用性低いがそれなりの用途に使えば速度面でメリットがある
834
名前:
デフォルトの名無しさん
:2005/06/24(金) 18:48:05
こんばんわ
ウィンドウのタイトルバーの高さを得るにはどうすればいいでしょうか?
OverlappedとToolWindowでは高さが異なります。
よろしくお願いいたします。
835
名前:
834
:2005/06/24(金) 18:51:55
SM_CYCAPTION
836
名前:
デフォルトの名無しさん
:2005/06/24(金) 21:07:28
>>834
AdjustWindowRectの結果から逆算とか。
>>835
ToolWindowのキャプションの高さがとれない。
837
名前:
デフォルトの名無しさん
:2005/06/24(金) 21:24:34
SM_CYSMCAPTIONつーのは違うのか?
838
名前:
デフォルトの名無しさん
:2005/06/24(金) 23:02:58
GetSystemMetricsを調べてこい
839
名前:
デフォルトの名無しさん
:2005/06/25(土) 00:37:23
>>810-811
ありがとう!
早速使わせていただきマス<・∀・)
840
名前:
デフォルトの名無しさん
:2005/06/25(土) 07:11:47
ハードディスクのセクタのリード/ライトをやりたいのですが、よくわかりません。
DeviceIoControl()を使うのだと思いますが、MSDNで調べると
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_deviceiocontrol.htm
>各制御コードの詳細情報については、各デバイスのドキュメントを参照してください。
となっています。どこのそのドキュメントはあるのでしょうか・・・?
あと、サンプルコードがあればご紹介いただけないでしょうか・・・?
841
名前:
デフォルトの名無しさん
:2005/06/25(土) 07:25:49
> DeviceIoControl()を使うのだと思いますが、
使わない。開いたらファイルのように読み書きするだけ
842
名前:
デフォルトの名無しさん
:2005/06/25(土) 08:24:56
>>841
それができるのはNT系だけ。
843
名前:
デフォルトの名無しさん
:2005/06/25(土) 08:27:15
>>840
http://www.vector.co.jp/soft/win95/util/se130037.html
844
名前:
デフォルトの名無しさん
:2005/06/25(土) 09:57:27
>>834
GetClientRectとClientToScreenとか
845
名前:
デフォルトの名無しさん
:2005/06/25(土) 14:30:55
ワークグループに参加しているPCのIPを全部取得したいのですけど、
何かよいAPIないでしょうか?
846
名前:
デフォルトの名無しさん
:2005/06/25(土) 14:43:33
無い
847
名前:
デフォルトの名無しさん
:2005/06/25(土) 18:52:08
>>845
知らんけどWNetOpenEnumあたりから始めてみる?
848
名前:
デフォルトの名無しさん
:2005/06/25(土) 22:02:06
C言語+Windows APIを使っているのですが、
最大化やウィンドウのリサイズを禁止するにはどうすればいいんでしょうか?
最小化はそのまま使えるようにしたいのですが…
849
名前:
デフォルトの名無しさん
:2005/06/25(土) 22:05:53
>>848
CreateWindow(Ex)を呼ぶときにWS_MAXIMIZEBOXやWS_THICKFRAMEを指定しなければ良いだけ。
850
名前:
840
:2005/06/25(土) 22:18:16
>>841
、
>>842
、
>>843
みなさん、どうもありがとうございます。m(_ _)m
私はWin98(1st)です。無料版BCC++を使っています。
まず、最初にCreateFile()のMSDNの説明通りにドライブを開いて見ようとしましたが、エラーで開けません。
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_createfile.htm
<<x.c>>
#include <windows.h>
#include <stdio.h>
void main(){
HANDLE hDrive;
hDrive = CreateFileA("\\.\C:", GENERIC_READ, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
printf("hDrive = %08X\n", hDrive);
if (hDrive == INVALID_HANDLE_VALUE){
printf("error\n");
exit(-1);
}
printf("normal\n");
}
NT系でないからでは、と思うのですが、MSDNの説明だと、
>Windows 95 では、上記の形式で文字列を指定すると、CreateFile 関数はエラーを返します。代わりに、次の手順に従ってください。
>dwCreationDistribution パラメータで、OPEN_EXISTING を指定しなければなりません。
>フロッピーディスクや、ハードディスクのパーティションを開く場合、dwShareMode パラメータで FILE_SHARE_WRITE フラグを指定しなければなりません。
と、開けるようなことが書いてあるのですが、これは違うのでしょうか?
851
名前:
840
:2005/06/25(土) 22:19:56
次に、ご紹介のRWFDのソースを流用してリードのテストをしてみました。
843さん、いいものをどうもありがとうございました。
<<main.c>>
#include <windows.h>
#include <stdio.h>
#include "diskio.h"
#define BUF_SIZE (0x200 * 8)
BYTE buf[BUF_SIZE];
DWORD const nDrive = 2; // 'C:'
DWORD const dwStartSector = 0;
WORD const wSectors = 1;
void main(){
HANDLE hVWin32;
hVWin32 = OpenVWin32();
if (hVWin32 == NULL){
printf("error: OpenVWin32()\n");
exit(-1);
}
ABSDiskRead(hVWin32, nDrive, dwStartSector, wSectors, buf);
printf("label = \"%8s\"\n", buf+3);
CloseVWin32(hVWin32);
}
<<ビルド法>>
bcc32 main.c diskio.c
852
名前:
840
:2005/06/25(土) 22:20:47
これは、うまくいきました。
しかし、"\\\\.\\vwin32"というのは何なのでしょうか・・・
regs.reg_EAX = 0x7305;
とか、
VWIN32_DIOC_DOS_INT25
というのを見ると、これはまるっきり16ビットDOSインターフェースなのですが、この方法が一番良い方法なんでしょうか・・・?
純粋な32ビットプロテクトモード・インターフェース風な手法はないのでしょうか?
853
名前:
デフォルトの名無しさん
:2005/06/25(土) 22:32:04
>>852
"\\\\.\\vwin32"はVWin32というVxDの指定。
他にもいくつかやり方はあるがどれもこんな感じ
http://web.archive.org/web/20040216212849/http://tech.millto.net/~morry/vwin32/adio/index.html#OSR2
854
名前:
デフォルトの名無しさん
:2005/06/25(土) 22:40:32
> 純粋な32ビットプロテクトモード・インターフェース風な手法はないのでしょうか?
Win9xは純粋な32ビットOSじゃないからそんなものはない。
純粋な32ビットOSであるNTにはある(
>>850
)。
855
名前:
デフォルトの名無しさん
:2005/06/25(土) 23:27:04
>>849
ありがとうございました。
856
名前:
デフォルトの名無しさん
:2005/06/26(日) 01:52:47
>>850
Win98ということだから今回は関係ないが、"\\.\C:"じゃなくて"\\\\.\\C:"だ。
Cでは\は特別な意味を持つことに注意。
857
名前:
デフォルトの名無しさん
:2005/06/26(日) 08:23:11
マウスでクリックしたところに円を描いて
その矩形の座標を配列に記憶(複数個)。
MW_MOUSEMOVE時に、
PtInRect()で矩形の外か中かで
SetCursor()を使ってマウスカーソルを
切り替えています。
円の数が増えるたびに反応が鈍くなって
カーソルがちらつきます。
矩形の検索がまずいんだと思いますが
いい方法はないでしょうか。
858
名前:
デフォルトの名無しさん
:2005/06/26(日) 09:26:17
こんにちは
MoveWindow(m_hWnd,0,0,772,450);
RECT rect;
GetClientRect(&rect);
MoveWindowで幅を772とした後、GetClientRectでRECT値を取り出したところ、rect.rightが749と指定した「772」とは違う値になります。
これはどういうことなのでしょうか?
MoveWindowは内部で何かしらの理由で数値を修正したりするのでしょうか?
よろしくお願いいたします。
859
名前:
858
:2005/06/26(日) 09:27:18
GetClientRect(&rect);
は
GetClientRect(m_hWnd,&rect);
と修正します。
860
名前:
デフォルトの名無しさん
:2005/06/26(日) 09:35:44
>>858
つ GetWindowRect
861
名前:
デフォルトの名無しさん
:2005/06/26(日) 09:40:41
>>858
ウィンドウの構造を勉強しておいで
862
名前:
デフォルトの名無しさん
:2005/06/26(日) 09:54:48
>>857
配列数がどれだけかしらんが500個あったら全部に対してPtInRect呼んでるのか?
だったらリージョンにしちまえよ PtInRegionな これで一発だ (円が増えるたびにリージョン更新な
ちらつきは毎回描画してんのか?変化があったときだけ書けばよろし
>>858
スクリーン座標とクライアント座標というものがある。
基点(0,0)となる位置が異なる。この基点のズレは自分で調整しる
863
名前:
デフォルトの名無しさん
:2005/06/26(日) 09:57:28
WM_CREATEが呼ばれる前にSetWindowLongで
ウィンドウにパラメータのようなものを渡すことはできませんか?
864
名前:
858
:2005/06/26(日) 10:01:14
m_hWndはリッチエディットでした。
どうやらクライアント領域にはスクロールバーが含まれないため、その分「差」が生じたみたいです。
スクリーン座標から幅を得たら、スクロールバーも含まれる値が得られました。
リッチエディットにおいて、クライアント領域はエディタ部分だけということを理解してませんでした。
スクロールバーも含まれると思ってましたので。
皆さんありがとうございました。
865
名前:
デフォルトの名無しさん
:2005/06/26(日) 10:12:25
(゚д゚)・・・・
866
名前:
858
:2005/06/26(日) 10:13:37
タブの中にリッチエディットを埋め込んでまして、ボーダーをドラッグすることでタブとリッチエディットがドラッグした分だけRight値とBottom値が変わるような
クラス設計をしてまして、結構ややこしいですね。
867
名前:
デフォルトの名無しさん
:2005/06/26(日) 10:15:49
>>857
2bitなり8bitのビットマップでも用意してヒット領域塗って、カーソル座標部分の色で判定すればいいんでない?
削除した場合は配列から再計算
868
名前:
デフォルトの名無しさん
:2005/06/26(日) 10:16:23
>>863
WM_CREATEが呼ばれる前じゃ、HWNDも分からないじゃないか。
SetWindowLongを呼べるわけ無いだろ。
869
名前:
デフォルトの名無しさん
:2005/06/26(日) 10:18:54
WM_CREATEはウィンドウが作成された時に呼ばれるのに、
それが呼ばれる前、つまりウィンドウが作成される前に何をできると思っているのか・・・
870
名前:
デフォルトの名無しさん
:2005/06/26(日) 11:00:40
ウィンドウクラス名を知る方法を教えてください。
ツリーならWC_TREEVIEWみたいな
871
名前:
865
:2005/06/26(日) 11:12:39
>>870
GetWindowClassName(HWND hWnd);
872
名前:
870
:2005/06/26(日) 11:44:05
>>871
そのようなAPIは見当たりませんでしたが。
873
名前:
デフォルトの名無しさん
:2005/06/26(日) 12:02:10
>>870
GetClassName(HWND hWnd, LPTSTR lpClassName, int nMaxCount);
874
名前:
デフォルトの名無しさん
:2005/06/26(日) 12:05:38
GetClassName
875
名前:
857
:2005/06/26(日) 12:18:35
>>862
できました。
ありがとうございます。
876
名前:
デフォルトの名無しさん
:2005/06/26(日) 14:14:59
一番頭(親)のウィンドウハンドルをGetするAPIはあると思うのですが…。
877
名前:
デフォルトの名無しさん
:2005/06/26(日) 14:23:56
>>876
GetParent()?
878
名前:
デフォルトの名無しさん
:2005/06/26(日) 14:31:41
>>876
ねーよそんなAPI
879
名前:
デフォルトの名無しさん
:2005/06/26(日) 14:37:08
>>878
http://www.microsoft.com/japan/msdn/library/ja/jpwinui/html/_win32_getparent.asp?frame=true
880
名前:
デフォルトの名無しさん
:2005/06/26(日) 15:05:41
阿呆
それはあくまで自分の親を取得するだけだ
一番頭と決まったわけではない
881
名前:
876
:2005/06/26(日) 15:19:56
無いようなので自作しました
NULLが返るまでループを繰り返して、一番頭を得られるようになりました。
どうもです。
882
名前:
デフォルトの名無しさん
:2005/06/26(日) 15:20:08
じゃ、GetAncestor?
883
名前:
デフォルトの名無しさん
:2005/06/26(日) 15:29:22
EnumWindow
884
名前:
デフォルトの名無しさん
:2005/06/26(日) 17:14:26
GetDesktopWindow()とか。
885
名前:
デフォルトの名無しさん
:2005/06/26(日) 20:27:13
>>884
デスクトップは親として扱わんだろ
886
名前:
デフォルトの名無しさん
:2005/06/26(日) 21:31:07
ちょっとうけた
887
名前:
デフォルトの名無しさん
:2005/06/27(月) 00:46:42
ダイアログのボタンを押したときにメッセージボックスを出すようにしたのですが、
ボタンを押すとメッセージボックスが2回立て続けにポップアップします。
なぜこのような現象が起きるのか分かりません。どのように対処すれば良いのでしょうか?
コンパイラはBCCです。
888
名前:
デフォルトの名無しさん
:2005/06/27(月) 00:49:43
そりゃ2回出るように書いてるからだとおもうよ。
889
名前:
デフォルトの名無しさん
:2005/06/27(月) 00:59:18
>>887
エスパーな漏れがおまいさんの悩み事を解決してやろう。
うむ、今の君に必要なのはずばり、「break」と見た!
890
名前:
887
:2005/06/27(月) 01:38:07
WM_COMMANDメッセージが2回送信されているようなのですが...
891
名前:
887
:2005/06/27(月) 02:57:42
ボタンスタイルのBS_NOTIFYが原因だったようです。
リソーススクリプトについての理解がまだ不十分なのですが、
リソーススクリプトに関する詳細な日本語のドキュメントがあれば教えて下さい。
892
名前:
デフォルトの名無しさん
:2005/06/27(月) 03:19:41
>>891
> 日本語の
ここでまず無理
893
名前:
デフォルトの名無しさん
:2005/06/27(月) 05:18:01
>>891
クレクレ厨が
894
名前:
デフォルトの名無しさん
:2005/06/27(月) 10:09:51
猫プロやWisdomでも見とけ
895
名前:
デフォルトの名無しさん
:2005/06/27(月) 11:08:33
>>869
遅レス
WM_NCCREATE は使えないか?
896
名前:
デフォルトの名無しさん
:2005/06/27(月) 11:10:40
リッチエディットを作成したあと、SetWindowTextで文字列を設定し、ShowWindowで表示させたのですが、
リッチエディットの下側のスクロール部分が描画されないという不具合がなぜか発生します。
右側のスクロールバーは表示されるのですが、
このような不具合を御存知な方はいらっしゃいますか?
897
名前:
デフォルトの名無しさん
:2005/06/27(月) 21:05:01
?
>>896
思いつくのは
・メッセージをフックしている。
・上にラベルなどが重なっている。
・縦幅が大きすぎて親からはみ出してる。
・単に水平スクロールのスタイルが指定されていない。
898
名前:
デフォルトの名無しさん
:2005/06/28(火) 11:26:53
WS_HSCROLLないとワードラップモードになるんだよなあれ
899
名前:
デフォルトの名無しさん
:2005/06/28(火) 18:26:22
任意のプロセスが所有しているウインドウを探すにはどうすればいいんでしょうか。
900
名前:
デフォルトの名無しさん
:2005/06/28(火) 18:47:34
>>899
ウィンドウを所有するのはプロセスではなく、スレッドなのでEnumThreadWindows()ならある。
901
名前:
デフォルトの名無しさん
:2005/06/28(火) 19:20:18
LoadImageで取得するHANDLEからイメージがICON,BMPであるかとか判別するAPIってありません?
さらっと見た感じみあたらないのですが・・
902
名前:
デフォルトの名無しさん
:2005/06/28(火) 19:38:36
天堂加速器のようにプロセスの実行速度をあげるにはどうしたらいいか教えてください
903
名前:
デフォルトの名無しさん
:2005/06/28(火) 19:50:48
>>900
スナップショットでオーナープロセスは特定できるみたいなので
それでなんとかなりそうです。さんくす。
904
名前:
デフォルトの名無しさん
:2005/06/28(火) 20:10:21
>>901
それは呼び出す側が指定するんじゃないのか?
905
名前:
デフォルトの名無しさん
:2005/06/28(火) 20:24:34
>>901
LoadImageの引数にタイプの指定があるのになぜそんなことが必要なのだ?
906
名前:
デフォルトの名無しさん
:2005/06/28(火) 20:44:20
>>902
SetPriorityClass
907
名前:
デフォルトの名無しさん
:2005/06/28(火) 20:47:34
>>902
SleepにAPIフックかけてSleepに意味をなさなくさせる
908
名前:
901
:2005/06/28(火) 20:59:16
ちとこちら側の仕様上、LoadImageで使用した引数がなんであるか不明なのです。
HANDLE値がわたされるだけなので・・
よって、HANDLE値を元に元データが何であるかを判別する方法があればよいなと
いうことでして・・
909
名前:
901
:2005/06/28(火) 21:19:11
GetObjectあたりでなんとかならないんですかね・・
BMPに関する記述はあるんですがICONはなにも記述されていないような・・
910
名前:
デフォルトの名無しさん
:2005/06/28(火) 21:28:08
GDI Objectじゃねえから > ICON
GetIconInfo、GetCursorInfo、GetBitmap(GetObject) のどれかでは
エラーが出ないだろうって事で。
911
名前:
デフォルトの名無しさん
:2005/06/28(火) 22:16:33
>>901
LoadImageに倣って種別も引数として受け取るようにしようとかいう考えは出てこんのか?
912
名前:
901
:2005/06/28(火) 22:24:53
>>911
いあ、引数に関しては私が変更する権限ないので・・としかいいようがない・・
913
名前:
デフォルトの名無しさん
:2005/06/28(火) 22:25:39
GetObjectType(HGDIOBJ)というものも有るが、ビットマップは判別できるがアイコンとカーソルは無理だしの
914
名前:
901
:2005/06/28(火) 22:33:12
>>913
のようですね。
みなさんいろいろありがとうございました。
とりあえず仕様変更打診しますので・・w
915
名前:
デフォルトの名無しさん
:2005/06/28(火) 22:36:10
c#でポストメッセージするときのwparamやlparamの値ってc++のときの値を入れてもだめなんだけど何で?
どうすりゃいいの?
例えば、c++なら、「Q」のwm_keydownなら、wparam00000051 lparam00100001
なんだけど、
C#で、PostMessage(hWnd, WM_KEYDOWN, new IntPtr(0x00000051),new IntPtr(0x00100001))といれてもエラーになります。
ディルインポートはちゃんとやってます。
[DllImport("user32.dll", SetLastError = true)]
static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
916
名前:
デフォルトの名無しさん
:2005/06/28(火) 23:01:15
つInt32
917
名前:
915
:2005/06/28(火) 23:44:25
PostMessage(hWnd, WM_KEYDOWN, new IntPtr(0x0000 | 0x0051),new IntPtr(0x0010 | 0x0001));
これでできました。どうも基本が分かっていないようで、おさわがせしました。
918
名前:
デフォルトの名無しさん
:2005/06/28(火) 23:48:01
こんばんは。
タスクトレイにプログラムを常駐させて
表示させてあるアイコンを右クリックすると
ポップアップメニューを表示するプログラムを
作成しています。
ポップアップメニューを表示するところまではできたのですが、
選択されずにその他の領域(デスクトップ等)がクリックされた時
表示されたポップアップメニューが出たままになっています。
この時にポップアップメニューを消したいのですが
どなたか方法を教えて下さい。
case WM_RBUTTONDOWN:
u = TrackPopupMenu(hPopUp, TPM_LEFTALIGN, pt.x, pt.y, 0, hWnd, NULL);
PostMessage(hWnd, WM_SYSCOMMAND, u, NULL);
return 0;
WinXPpro、VC6++ です。
919
名前:
デフォルトの名無しさん
:2005/06/29(水) 00:45:39
タスクマネージャのようにプロセスごとのCPUの使用率を取得したいと思っています。
調べたところ、pdh.h関連でパフォーマンス測定ができることがわかりました。
PdhEnumObjectItemsで全プロセスのインスタンスのリストを取得し、カウンタに登録し、と
いうところまではわかったのですが、取得したインスタンス名からプロセスIDを取得する
方法がわかりません。どうかよろしくおねがいします。
920
名前:
デフォルトの名無しさん
:2005/06/29(水) 01:01:37
>>918
TrackPopupMenuのまえにSetForegroundWindowをすれ
921
名前:
デフォルトの名無しさん
:2005/06/29(水) 01:11:18
一行のEDITコントロールで、
エンターキーが押されたときに、文字列を読んで消す。
ということをやりたいのですが。
(IRCクライアントとかメッセンジャークライアントなどチャットクライアントで、改行したときに発言するような感じで入力させたい)
WM_KEYUPがVK_RETURNで飛んできたとき、ということにすると、
IME開いていて変換をエンターで確定したときも、文字列を読んでしまいます。
どうするのが一般的なんでしょうか?
922
名前:
デフォルトの名無しさん
:2005/06/29(水) 01:17:52
>>921
ディフォルトボタンを用意しておいて、そっちのイベントで処理したら?
1行Editだと、Enterキーはスルーされてディフォルトボタンが反応すると思うけど。
#当方MFC屋なので見当違いだったら失礼。
923
名前:
デフォルトの名無しさん
:2005/06/29(水) 01:19:13
>>922
見当違いではないと思ふ
924
名前:
921
:2005/06/29(水) 01:26:27
MFCはまったくわからないんですが、
「ディフォルトボタン」ってMFC固有の機能か何かでしょうか?
925
名前:
デフォルトの名無しさん
:2005/06/29(水) 01:32:13
>>924
BS_DEFPUSHBUTTON
926
名前:
デフォルトの名無しさん
:2005/06/29(水) 01:37:00
>>924
エディットにES_WANTRETURNがついてなければ
[Enter]キーはデフォルトボタンを押したことになる。
927
名前:
921
:2005/06/29(水) 01:40:58
ありがとうございます。
でもこれってダイアログじゃないとだめとか書いてあるような気がするんですが。
928
名前:
デフォルトの名無しさん
:2005/06/29(水) 01:47:07
>>927
そんな気もする
929
名前:
921
:2005/06/29(水) 02:02:53
これがいいやり方なのかどうかわかりませんが、
EDITをマルチラインにして、(見かけ上は一行)
親にWM_COMMANDがEN_VSCROLLで飛んできたときを捕まえるようにしました。
930
名前:
デフォルトの名無しさん
:2005/06/29(水) 02:48:46
サブクラス化するのが一般的なんじゃないかという気も…
931
名前:
921
:2005/06/29(水) 03:25:42
最初はサブクラス化してVK_KEYUPを捕まえていたんですが、それだとうまくいかなかったので。
932
名前:
デフォルトの名無しさん
:2005/06/29(水) 03:44:58
サブクラス化してWM_CHARで\rを捕まえる
で行ける気がするのだが
933
名前:
921
:2005/06/29(水) 04:00:05
>>931
×VK_KEYUP
○WM_KEYUPのVK_RETURN
寝ぼけているみたいだOrz
>>932
そういう方法もあるんですか。
どうも、その方法も試してみます。
934
名前:
デフォルトの名無しさん
:2005/06/29(水) 04:03:30
あ、もちろんWM_CHARなのでTranslateMessage()は忘れずに
935
名前:
デフォルトの名無しさん
:2005/06/29(水) 05:26:52
WinAPIむつかしですなー。
/* じっけん */
void jikken(void) {
HDC hdc;
HWND hwnd;
int xLength, yPos;
int i, decr;
hdc = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
hwnd = GetDesktopWindow();
xLength = GetDeviceCaps(hdc, HORZRES);
yPos = (GetDeviceCaps(hdc, VERTRES)) >> 1;
decr = xLength >> 6;
for (i = xLength; i >= 0; i -= decr) {
TextOut(hdc, i, yPos, TEXT("orz "), 5);
UpdateWindow(hwnd);
Sleep(100);
TextOut(hdc, i, yPos, TEXT(" "), 5);
}
DeleteDC(hdc);
}
int WINAPI WinMain( 略 ) {
jikken();
return FALSE
}
936
名前:
デフォルトの名無しさん
:2005/06/29(水) 07:14:57
>return FALSE
笑うところですか?
937
名前:
デフォルトの名無しさん
:2005/06/29(水) 07:46:08
怒るところです
938
名前:
デフォルトの名無しさん
:2005/06/29(水) 07:58:25
漏れは泣きそうになったが
939
名前:
純一郎
:2005/06/29(水) 09:42:59
人それぞれですから!
940
名前:
デフォルトの名無しさん
:2005/06/29(水) 10:08:57
質問ですが、
CreateFileでハンドルを作り、ファイルをReadしようとしたんですが、
「読み込み専用ファイル」がなぜか読み込まれません。
CreateFileの引数に何かをセットすればいいと思うのですが、
何をセットすればいいのでしょうか?
よろしくお願いいたします。
941
名前:
デフォルトの名無しさん
:2005/06/29(水) 10:27:28
>>940
それ、CreateFileは成功してるのか?
942
名前:
デフォルトの名無しさん
:2005/06/29(水) 10:28:15
>>940
>「読み込み専用ファイル」がなぜか読み込まれません。
どこで失敗してるのか調べる。
GetLastErrorの値が得られる場合はそれも調べる。
943
名前:
デフォルトの名無しさん
:2005/06/29(水) 12:04:02
>>921
メッセージ処理で対応したいなら
WM_IME_STARTCOMPOSITION
WM_IME_ENDCOMPOSITION:
この二つのメッセージでIMEが変換中かわかる
944
名前:
940
:2005/06/29(水) 18:49:53
>>941
>>942
ご返答助かります。
::FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
::GetLastError(),
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&pCh,
0,
NULL);
によると、「アクセスが拒否されました。」と出ます。
ただ、このファイルは読み取り専用となっております。
もう少し突き詰めてみたいと思います。
945
名前:
デフォルトの名無しさん
:2005/06/29(水) 18:58:33
>>944
CreateFileはどんな引数を渡している?
946
名前:
940
:2005/06/29(水) 19:09:51
GENERIC_WRITEもorしていたため、おきた不具合でした。
くだらない質問ですいませんでした。
ありがとうございました。
947
名前:
デフォルトの名無しさん
:2005/06/29(水) 19:10:37
やっぱりな
948
名前:
デフォルトの名無しさん
:2005/06/29(水) 19:13:47
ウィンドウに直接描画していたのがちらつきが酷いです。
CreateCompatibleDC()で取得したメモリDCにいったん描画してBitBlt()で転送すればちらつきが少なく描画が出来るらしいですが、
それで大丈夫でしょうか。
よろしくお願いします。
949
名前:
デフォルトの名無しさん
:2005/06/29(水) 19:20:20
>>948
それで大丈夫でしょう
950
名前:
948
:2005/06/29(水) 19:21:45
>949
ありがとうございます、試してみます
951
名前:
デフォルトの名無しさん
:2005/06/29(水) 19:49:31
SetTextColor以外にテキスト色を設定するAPIはありますか?
952
名前:
デフォルトの名無しさん
:2005/06/29(水) 20:34:13
MFC使う=ファミリアを運転する
Win32APIを使う=フェラーリを運転する
953
名前:
デフォルトの名無しさん
:2005/06/29(水) 20:39:26
?
>>951
何を知りたいんだ?SetTextColor使えばいいじゃん。
954
名前:
デフォルトの名無しさん
:2005/06/29(水) 21:02:10
リッチエディットならEM_SETCHARFORMATが来たときのCHARFORMAT.crTextColor。
コンソールアプリならSetConsoleTextAttribute()とか。
955
名前:
デフォルトの名無しさん
:2005/06/30(木) 03:16:21
>>953-954
ありがとうございます。
956
名前:
デフォルトの名無しさん
:2005/06/30(木) 04:07:02
すみません。
SetViewPortExtEx() on MM_ISOTROPIC
が、むつかしいのですが、
以下であってるでしょうか?
1:
ViewPort(0,0) 画面左上
ViewPort(そのときのクライアント領域サイズ in デバイスピクセル) 画面左下
これらはぴくりとも動かない
2:
SetWindowExtExで指定された
論理ユニット数をおさめるのにつかう
ViewPortのデバイスピクセル数を指定。
このときy軸の方向などが逆だと、引数が負数になる
以上で スケール率 =
デバイスピクセル数 / 論理ユニット数 (on 同一物理サイズ内)
が設定される。
3:
論理座標(x,y)からWindowのOrgの座標(x,y)をひいて
幅と高さの論理ユニット数を求め、
それにスケール率をかけて
さらにViewPortのOrgを加算することで
指定された論理座標が適切なデバイス座標(固定)
にマップされる。
4:
論理ユニットの一ユニットあたりの
物理的な幅と高さが同一になるように
Windowsが調整してくれる。
957
名前:
デフォルトの名無しさん
:2005/06/30(木) 04:35:55
>>952
なんか違うような・・・
958
名前:
902
:2005/06/30(木) 04:54:53
教えてください
959
名前:
デフォルトの名無しさん
:2005/06/30(木) 07:24:48
Rectangle()で矩形を描いたときペンの太さを大きくすると
InvalideteRect()で矩形の領域を再描写したとき矩形の範囲を
ペン幅が超えているので、はみ出ている部分が描写されません。
ペンの幅をみこして領域を描写するしかないのでしょうか。
960
名前:
デフォルトの名無しさん
:2005/06/30(木) 07:31:12
?
ペンのスタイルにPS_INSIDEFRAMEを指定するといいと思う。
961
名前:
デフォルトの名無しさん
:2005/06/30(木) 08:23:44
でなければ、ペン幅を考慮して領域を作るしかない
962
名前:
デフォルトの名無しさん
:2005/06/30(木) 11:08:44
こんにちは
質問があります。
1)リッチエディットの親をタブコントロールとして作ったのですが、右クリックのポップアップメニューで編集機能をするようにしたのですが、
WM_COMMANDがタブコントロールのほうにSendされているようで、イベント処理ができません。
通常コモンコントロールはウィンドウプロシージャを指定しないので、WM_COMMAND処理ができなくなってしまます。
また、ウィンドウプロシージャをSetWindowLongでタブコントロールに指定したら、今度はタブコントロールが描画されなくなってしまいます。
タブコントロールを親とし、またタブコントロールからWM_COMMANDを得られるようにするためにはどうすればいいのでしょうか?
2)今ウィンドウが表示されているかどうかが確認できるAPIはありますでしょうか。
よろしくお願いいたします。
963
名前:
962
:2005/06/30(木) 11:10:06
2)は解決しました IsWindowVisible
964
名前:
デフォルトの名無しさん
:2005/06/30(木) 12:14:15
てきとうなことをいうと
タブコントロールをつくるときに
p = GetWindowLong(hWndtbctrl, GWL_WNDPROC);
してから
SetWindowLong(hWndtbctrl, GWL_WNDPROC, oreproc);
などして
oreproc内でWM_COMMANDのうち
notification_codeとctrlIDの一致するものだけ処理して
あとは
CallWindowProc(p, ....)
とか?
965
名前:
デフォルトの名無しさん
:2005/06/30(木) 12:18:34
訂正
もとのwndprocのアドレスは
p = SetWindowLong(hWndtbctrl, GWL_WNDPROC, oreproc);
などでpにとれる、もよう
966
名前:
962
:2005/06/30(木) 12:32:08
>>964
ご返答いただき助かります。
COMBOBOXやLISTやTABなどに、SetWindowLong(hWndtbctrl, GWL_WNDPROC, oreproc);をしてウィンドウプロシージャを設定すると、
コントロールの描画がされなくなるのですが、
独自に用意したウィンドウプロシージャをコントロールにSetしても、
コントロールを描画してくれる方法・手段を教えていただきたいのですが。
コントロールを描画するための何か(API)をWindows内部で呼び出していると思われますが。
967
名前:
デフォルトの名無しさん
:2005/06/30(木) 12:51:41
>>966
サブクラス化
968
名前:
デフォルトの名無しさん
:2005/06/30(木) 13:20:08
>>966
その方法が
>>964
氏が説明しているサブクラス化だよ。最後に CallWindowProc() を呼ぶところがミソ。
で、そもそも
>>962
の1)だけど、
@ リッチエディットを、WM_COMMAND を処理させたいウィンドウの子として作成
A SetParent() でリッチエディットの親をタブコントロールに変更
じゃだめかしら?(そういう意図じゃなかったんならスマソ)
969
名前:
デフォルトの名無しさん
:2005/06/30(木) 13:48:10
いつもここ見て思うけどお前等の説明って超がつくほど下手糞だよなww
なんつーか一連の手順って感じで説明してないし関数名とかポンポン
あげてるだけだしwwwこの手の質問に対しては「サブクラス化」
ほとんどこれだけwwwwマジワロスwwwwwwたぶんわざとやってんだと思うけどwww
970
名前:
デフォルトの名無しさん
:2005/06/30(木) 13:50:36
サブクラス化の方法は
>>964
の説明で十分だろ
971
名前:
デフォルトの名無しさん
:2005/06/30(木) 13:56:24
トーシロがやるアドレス書き換えの手法ワロスwwwww
おまけに日本語の説明ド下手wwww書いてる本人ですら根本的にわかってないもようwwwwwまぁ糞スレだからどうでもいいけどww
972
名前:
デフォルトの名無しさん
:2005/06/30(木) 14:05:13
あと964氏だってwwwwwワロス「氏」なんてつけるレベルのレスかよwwwwwwww激ワロスwwwwwwwどうせ自分で氏ってつけただけだと思うがwwwwww
973
名前:
デフォルトの名無しさん
:2005/06/30(木) 16:13:00
>>956
プリンター出力でもやっているのかな?
私はこんな順番で呼んでいます。 X,Y は適当に(笑)
SetWindowOrgEx(hdc, 0,0, NULL);
SetMapMode(hdc , MM_ISOTROPIC);
SetWindowExtEx(hdc, , ,NULL);
// Viewport は、左上基点の座標系: Yを - で Window 座標を反転
SetViewportExtEx(hdc, , , NULL);
// ココを移動して 窓を移動する
SetViewportOrgEx(hdc, , , NULL);
974
名前:
959
:2005/06/30(木) 18:15:37
>>960
>>961
>>960
>>961
ありがとうござます。
こんなペンのスタイルがあったなんて...。
単純なことを見落としていました。
_| ̄|○
975
名前:
デフォルトの名無しさん
:2005/06/30(木) 18:32:18
USBなどの取りはずし可能装置に対して
取りはずし要求が出たとき
WM_DEVICECHANGE
というメッセージを飛ぶのでこれをつかまえて
イベントが
DBT_DEVICEQUERYREMOVE
かどうかを検査すれば,それだとわかります.
ところがどのドライヴ文字をわりあてていた装置かを
取得する方法がわかりません.
何か方法はありますか?
976
名前:
デフォルトの名無しさん
:2005/06/30(木) 18:44:56
単純にドライブを列挙すれば?
歯抜けがありゃそこだし、歯抜けがなけりゃ未使用の中の一番若いやつだ
977
名前:
デフォルトの名無しさん
:2005/06/30(木) 19:49:23
Windows XPをスタンバイ状態にして、n秒後にスタンバイから復帰する
プログラムを作りたいのですが、
どんな資料を集めればよいでしょうか?
DDKとか知らないとダメでしょうか?
978
名前:
デフォルトの名無しさん
:2005/06/30(木) 20:15:59
あ、やっぱいいです。
979
名前:
デフォルトの名無しさん
:2005/06/30(木) 20:19:52
コラー!
980
名前:
デフォルトの名無しさん
:2005/06/30(木) 20:51:45
せっかくだからSetWaitableTimerと書いておこう
981
名前:
デフォルトの名無しさん
:2005/06/30(木) 20:54:52
>>977
がいかにして、自動でスタンバイさせ、また自動でスタンバイから復帰させる
プログラムを作りたくなったのか知りたいのですが、
どんなレスをすればよいでしょうか?
煽りとか知らないとダメでしょうか?
982
名前:
デフォルトの名無しさん
:2005/06/30(木) 21:37:51
PC起動タイマーみたいなもんを作りたいんじゃないのか?
・3時間後に復帰するようセットしてスタンバイにしておく
・お出かけ(3時間くらい)
・帰ってきたら起動してて即作業に
983
名前:
デフォルトの名無しさん
:2005/06/30(木) 21:41:28
じゃあ
適当なUSBデバイス(リモコンとか)でスタンバイ状態から
復帰させる方法を教えてください
984
名前:
デフォルトの名無しさん
:2005/06/30(木) 21:51:48
物理ディスクの容量を取得したいのですがどうすればいいんでしょうか。
WMIのWin32_DiskDrive.size相当の情報をWMIを使わずにとりたいです。
985
名前:
デフォルトの名無しさん
:2005/06/30(木) 22:41:30
XP上でVC++6.0で_beginthreadex
を使えないんです。原因分かる方ヘルプゥゥ!
もちろんprocess.hしてます。
・・・・・コンパイラメッセージ・・・・・・
warning C4013: 関数 '_beginthread' は定義されていません。
986
名前:
デフォルトの名無しさん
:2005/06/30(木) 22:45:00
XPで駄目ならWin2Kを使えばいいのに
987
名前:
デフォルトの名無しさん
:2005/06/30(木) 22:46:34
>>985
どうせシングルスレッド用のライブラリリンクしてるとかじゃねぇの
988
名前:
デフォルトの名無しさん
:2005/06/30(木) 23:18:39
いつのまにC4013がリンカで出るようになったのやら
989
名前:
デフォルトの名無しさん
:2005/06/30(木) 23:25:32
>>985
Cランタイムライブラリに
マルチスレッド、またはマルチスレッドDLLを指定しる
990
名前:
デフォルトの名無しさん
:2005/06/30(木) 23:32:13
>>988
リンクするCRTを指定するコマンドラインオプションはコンパイラオプションで、その指定でマクロ定義が変化するんだが。
素人は黙っとけ
つーか、beginthreadは微妙にAPIじゃないけどな
991
名前:
デフォルトの名無しさん
:2005/06/30(木) 23:43:42
↓素人の反撃
992
名前:
デフォルトの名無しさん
:2005/06/30(木) 23:51:25
残念、反撃はかわされてしまった
993
名前:
デフォルトの名無しさん
:2005/07/01(金) 00:11:32
質問ですが、
MFCにDoModalというものがありますが、
これに変わるWin32APIはありますか?
994
名前:
デフォルトの名無しさん
:2005/07/01(金) 00:21:45
>>993
DialogBox()
995
名前:
918
:2005/07/01(金) 00:59:39
>>920
亀ですがありがとうございました。
おかげさまで解決いたしました
996
名前:
デフォルトの名無しさん
:2005/07/01(金) 01:34:45
>>977
タスクスケジューラ
997
名前:
デフォルトの名無しさん
:2005/07/01(金) 01:43:39
クスクスケジーラミ
998
名前:
デフォルトの名無しさん
:2005/07/01(金) 02:53:45
Win32API質問箱 Build33
http://pc8.2ch.net/test/read.cgi/tech/1120153520/
999
名前:
デフォルトの名無しさん
:2005/07/01(金) 03:02:37
>>975
よく分からんが、
ttp://forums.belution.com/ja/vc/000/310/93s.shtml
とか、
ttp://www.ouk.jp/ogawa/sforum/sfrm.html
↑ここのページ内を
USBストレージデバイスのドライブ名取得について
で検索。
1000
名前:
デフォルトの名無しさん
:2005/07/01(金) 03:02:43
>>1-1000
Advanced Windows 嫁♥
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.