■過去ログ置き場に戻る■ 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.