Windows Programing for C/C++(Not MFC)

このエントリーをはてなブックマークに追加
11
似たようなスレで「WIN32API 質問箱」がありますが
Windowsプログラムを作るにあたって、API以外の疑問や質問を
ぶつける為に作りました。

自分もMSの摩訶不思議な規則や仕様(バグ)等に悩まされてます。
質問や疑問以外にも、プログラミングしていて気付いた事や発見等も
書き込んでくれると有難いです。

あ、自分の開発環境はVisualC++でMFCを使ってないので
C/C++でMFC無しの方向でお願いします。
21:02/04/08 13:21
さて、自分でスレ立てておいて、昔から疑問に思ってる事があります。
それは、最初に渡されるHINSTANCEの扱いです。
Windowsプログラム等を見ると、迷わずグローバル変数を使ってますよね。
最近までは、グローバル変数を定義して、渡された瞬間に値を代入してましたが
最近は、GetWindowLongを使ってウィンドウハンドルから求めてグローバル変数を
使わない方向にしています。皆さんは、どうされてますか?
3デフォルトの名無しさん:02/04/08 13:21
2げとずざ。
MFCなしでC++って人いるの?
4デフォルトの名無しさん:02/04/08 13:21
2ゲトー
51:02/04/08 13:22
>>2

>Windowsプログラム等を
Windowsプログラムのサンプル等を
61:02/04/08 13:25
>>3
自分はMFC無しでC++でプログラムしてます。
やはり、CよりC++の方が慣れてくると色々と
便利ですし…(その分…いや倍位、短所もあるけど)

どちらかというと、不満無くMFCを使ってる人の方が不思議です。
7デフォルトの名無しさん:02/04/08 13:38
>>2
漏れはグローバル変数に入れてしまってるが、確かにグローバル変数は使わない方向で逝きたい…。
が、ウィンドウハンドルから取得って、そのウィンドウハンドルは、何処から取得するの?
8デフォルトの名無しさん:02/04/08 13:40
>>6
誰も不満無くMFCを使ってる奴なんかいねーよ。
みんな、不満言いながらMFC使ってんだよ。
9デフォルトの名無しさん:02/04/08 13:41
GetInstance()
103(まぼろしの2):02/04/08 17:29
>>8 わらた。はげど。
11デフォルトの名無しさん:02/04/08 20:47
>>10
禿同。
MFCだけでなく、Windows自体が…(以下略)
12デフォルトの名無しさん:02/04/08 20:55
>>2
オレの記憶違いでなければ、Win32以降のWinMainに渡されるHINSTANCの値は
ともに無意味だっと思うが。だからオレは固定にしている。
13デフォルトの名無しさん:02/04/08 20:57
>12
今まで無事でよかったね。
14デフォルトの名無しさん:02/04/08 20:58
>>8に激しく同意。
15デフォルトの名無しさん:02/04/08 20:59
>>13 ん゛HINSTANCの値が何を示しているのかわかかって使用してい
るつもりだがなにか問題があるか? 具体例を示してくれ。
理解してんならいんじゃないの
俺も早く>>8みたいなかっこいいレス付けれるようになりたいよ
181:02/04/08 23:32
>>12
>>13
>>15

なんとなく、わかってたんだけど、実験してみて初めて知った。

BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM lParam){
 TCHAR szWindowText[200], szBuff[300];
 GetWindowText(hWnd,szWindowText,200);
 if(szWindowText[0]==0) return TRUE;
 sprintf(szBuff, "%s - %08x",szWindowText,GetWindowLong(hWnd,GWL_HINSTANCE));
 SendMessage((HWND)lParam,LB_ADDSTRING,0,(long)szBuff);
 return TRUE;
}
LRESULT CALLBACK TestWindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
 static HWND hList;
 switch(uMsg){
  case WM_CREATE:
   hList = CreateWindow(TEXT("LISTBOX"),NULL,WS_CHILD|WS_VISIBLE|LBS_STANDARD,0,0,0,0,hWnd,NULL,(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),NULL);
   EnumWindows(EnumWindowsProc , (LPARAM)hList);
   return 0;
おもいっきり WIN32API とかぶってるじゃないか
20デフォルトの名無しさん:02/04/08 23:38
かぶってますね。続きは WIN32API でどうぞ。

http://pc.2ch.net/test/read.cgi/tech/1017072275
211:02/04/08 23:39
>>8
>>10
>>11
>>14
>>17
皆さん、Windowsプログラムは仕事でしてるんでしょうか?
自分の場合は仕事でする場合は1人か、複数人でも幸運にも
MFCを使わない場合が多いのです。
あとは、趣味でプログラムをする時ですが、
この時はもちろん、MFC無しです。

仕様とかで「MFCを使う事」とかになってるんでしょうか?
それとも、もともとMFCを使って組んであって、それを引き継いだとか??
>>1 よ、スレタイトルと趣旨が異なっているぞ。

「C/C++で Windows programming をサポートするフレームワーク/ライブラリって知りませんか?
 有名なやつはいいです」

という質問なら理解できる。あるかどうか知らんけど。GTKがあるか。

> Windowsプログラムを作るにあたって、API以外の疑問や質問を
> ぶつける為に作りました。
> 自分もMSの摩訶不思議な規則や仕様(バグ)等に悩まされてます。

摩訶不思議な挙動はAPIの実装あるいは仕様が引き起こすものだ。
にもかかわらずAPI以外という限定は理解できん。

それから >>2 は明らかに WIN32API 逝きだ。

>>21
MFC使いに苛められたのか?
2312:02/04/09 01:46
12=14=15 なんだが。
>>21
わしは、仕事の関係でMFCを使用している。既存のコードがMFCなんでね。
その改修をやると仕方なしにMFCを使用せざるえない。

個人では、自作のライブラリーを利用している。

>>22
>摩訶不思議な挙動はAPIの実装あるいは仕様が引き起こすものだ。
>もかかわらずAPI以外という限定は理解できん
一部同意、確かにほとんどは、APIの実行結果に互換性がなく発生することが
多いな。
 ただ、ヘッダーファイルの構造体の定義の一部変更でおかしくなることもあるね。
わしが最近はまったのは、フリーの3Dライブラリーをわしのライブラリーで
使用としたらリンクが出来なかったことがあった。
リンクできないのは、3Dライブラリーで「#define STRICT」が定義していな
かったせいなのだが、最新のwindows.hでは「STRICT」を使用していない可
能性も考えられる。
そういうことを1は知りたいのではないか?と勝手に憶測するがね。

 













(余分な改行が説得力の無さを示してるようで…)
251:02/04/09 02:30
>>22
そうですね。スレの趣旨とズレた方向に話を持っていってしまったみたいですね。
スレ立てた本人が、スレの趣旨と違う事を書いてたら駄目ですね…。申し訳ない。

ここのスレの趣旨はAPI以外のWindowsProgramに関する事、全てです。
言語はC/C++で非MFCという事で。別にMFC使いに苛められたい訳では無いです。
…が、書き方がソレっぽくなっちゃいましたね。

今、直ぐに「コレ」といった例が思いつかないのですが、プログラムを
していると、APIの純粋な疑問よりも、バージョンの違いから来る
動作の違いや、定義の違い等がありますよね?

あと、サンプル等ではAPIの動きを説明する為に、それに特化した不自然な
プログラムが載っている事が多々あります。しかし、Windowsプログラムには
独特のクセ等が多く、それを自然なプログラムだと自分で思っていて、後で
それが不自然なプログラムだった事に気付いたりする事は多いのではないでしょうか?

そういう疑問を質問して答える場が無いなー。と思ってスレ立ててみました。
>>2では、「HINSTANCEをどういう風に扱っていますか?」という疑問で
「HINSTANCEをどう取得すれば良いか?」という結果重視の質問ではありません。
その辺が「WIN32 APIスレ」と違う所だと自分で思っているのですが…。
>>1
MFC使ってるけど、GetWindowLong()使ってるYO!
それ以前にHWND hWnd = GetSafeHwnd();ってやって、Win32APIで処理してる。
単なるラッパならラッパ関数呼ばなくなった分だけ早くなんねーかな? とか思ってんだけど、実際はあまり変わんねー。
でもやる(藁
2712:02/04/09 08:32
>>24
ああ確かに、逝って来るわ。
28デフォルトの名無しさん:02/04/09 14:11
>>22

>摩訶不思議な挙動はAPIの実装あるいは仕様が引き起こすものだ。
>にもかかわらずAPI以外という限定は理解できん。

漏れが思うに「WIN32API質問箱」の方も定義がいまいちだと思うYO!
例えば、ウィンドウの最大化ボタンとクローズボックスを非表示にして
最小化ボタンだけ表示させたい時に、質問するのは「WIN32API質問箱」か?
質問しても、「WM_NCPAINTを捕まえて自前で処理しろ!」と言われるのが
オチだろう。確かに、そうだけど実際それを実行するのは難しいし
質問者は、むしろ、「どう自前で処理をすれば良いのか?」という疑問に
進む事は当然だろう。しかし、それを質問すると「質問厨」とか言われて
おしまいだろう。

もしかしたら、他の意外な方法(効率とかは抜きで)があるかもしれないし
そういうAPIやメッセージを駆使して実現する事は、APIの質問からズレて
いるような気がする。

ここは、そういう趣旨のスレなのでは?…と勝手に漏れは推測する。
…というか、願う。漏れも、この手の疑問はいっぱいあるから。
29デフォルトの名無しさん:02/04/09 14:50
>>22の言う
「C/C++で Windows programming を(略)」なスレなら(・∀・)イイ!。

マイナーな奴でこんなのはどう?

SOL++
http://home.att.ne.jp/green/atlan/sol2000/library.html

Motifにバイアスがかかってる感じのクラスライブラリ。

もう手に入らないけど、ソフトバンクから出てた
「Windows 95 SUPER CLASS LIBRARY」って本に
ついてたやつの最新版みたい。
>>1に質問だが
GetModuleHandle(NULL);でいけない理由は?
たとえば、ウインドウを持たないdllのインスタンスハンドルを得るにはどうしてる?
311:02/04/09 19:52
>>30
特にGetModuleHandleでは、いけない理由はありません。

…というか、今までグローバル変数を定義して、
渡された瞬間に値を代入してました。Windowsのサンプルプログラムでは
ほとんどが、この方法になってると思います。(Windows APIバイブル等)

しかし、そうじゃなくてGetWindowLongを使った方がグローバル変数なんか
定義しなくても良いんじゃないのか?と、最近思った訳です。

GetModuleHandleですか…。それは気付きませんでした。
確かに、こっちの方がスマートかもしれませんね。
もしかして、GetModuleHandleでHINSTANCEを取得している方って多いんでしょうか?
それとも常識??自分が今まで気付かなかっただけ???
とりあえず、>>1のコテハンはやめてくれ。
33デフォルトの名無しさん:02/04/09 20:53
俺は逆にグローバル変数(って実際にはクラスでラップしたメンバー
だったりするが)を見直してる。

昔はグローバル変数等で管理している状態?と実際の状態がバグで
食い違ったり、APIで取れる情報を変数に抑えておくと、同じ情報を
二重に持っているみたいで嫌だったんで、APIで取得できる情報は
変数に押さえるのを極力やめていた...

が、しかし、パフォーマンスがでないんよ。結構頻繁に使用する
情報だったりすると、ちょっとした連想配列使った情報検索
なんかよりAPI呼び出しの方が高価みたい。

が、HINSTANCEは頻繁庭使わんか。
>>34
普通は頻繁に使う/ループ内で使う値は自動変数に一時的に保存するだろ。
HINSTANCEのやうなプログラムそのものが持つてゐる性質は、
グローバル變數になつて問題は無い、と思つてをります。

問題となる使ひ方は、処理の簡略化のため、データのやり取りに使ふ、
というやうな場合ではないですか?
3734:02/04/09 22:05
>>35
大体においてローカルで済ませられるならそのほうがいいでしょ。

でもwindowsのGUIはメッセージループに戻る必要があるでしょ。
でね、それをウィンドウ矩形毎回取得したり、GetWindowLong使ったり、
IsWindowVisible使ったり...つまりはそういうAPI叩きは遅いって事。

実際には独自HashMapでHWNDと関連づけたデータ構造から状態取得
したほうがえらく速かったという。

MFCとか使ってるならCWnd派生クラスのメンバ変数でも良いが、
MFCはメッセージループからしてとろいからなー。
>>37
まぁ、悪いとは言わないけどね。
外部アプリから勝手にウインドウスタイル変更されたりした場合に、
内部の状態と食い違いが生じてくるでしょ。
3934:02/04/10 01:16
>>38
そうなのよねー、そこらへんが悩みどころ。
性能とのトレードオフっちゅー事でしょーか。
かといって昔の俺の様に、何でもかんでもグローバル
データや情報の二重管理は良くないって思っている人結構
いないですか?

実際にはバグ以外では有り得ないって事は言えないですが、
子ウィンドウが外部アプリで勝手にクローズされたり等
対話アプリとして作っている以上きりがないので
(そんな事コーディングで毎回チェックしてられねーっ
ちゅうねん)俺は使用頻度が高い情報はオフラインキャッシュ
とゆーか、プログラムのメモリに置くのもOKだと思う。

#DBのファイルを稼動中に書き換えて、DBのメモリ内のキャッシュ
とファイル内の情報が食い違うようなものだと思うが。

MSのアプリや市販ソフトも自作アプリからスタイル変更したり
SW_HIDE等しても無視されちゃってるしね-。
#逆に不正操作(チート)防止の為にわざとやってるとしか思えない
様な挙動をしたりして。
401:02/04/10 02:03
>>32
了解です。スレの趣旨がわかった方が少数でもいるみたいなので、
>>1は、ここで消えます。(何か自分に対する質問があれば別ですが)
次回からの自分の書き込みは「デフォルトの名無しさん」という事で…。
普段からあらゆる状況を想定して、ウインドウが閉じられても自動リカバリしたり、
スタイルもきっちり規定のものに戻すコードを書いているんだが、くどいのかな、やっぱり。
42デフォルトの名無しさん:02/04/10 02:53
ウィンドウの属性が実行中に強引に変えられたり
するものは考えなくて良いと思うのだが、
最近、思ったのは「ウィンドウの境界の幅」。
結構、かなりのアプリが対応してない。
今まではデフォルトの幅が1だったけど、
XPのデフォルトの幅が5位(詳細忘れた)になってるので
気付いて慌てて直したアプリも多い筈…。
> ウィンドウの属性が実行中に強引に変えられたり
> するものは考えなくて良いと思うのだが、

考えろよ… 対した作業量じゃないだろ。
いくつかのメッセージに反応すればいいだけだし。
44デフォルトの名無しさん:02/04/10 03:07
>>34-39
俺は、グローバル変数は極力使わない。
なんでもAPI等を使って取得するようにしてる。
確かにパフォーマンスは悪い。

どうしても遅さが気になる時はその部分だけ一時的に
グローバル変数を使用している。
後々、PCのパフォーマンスが上がり、その遅さが
気にならない程度になってきた時にバージョンUPの時等に
APIの取得に切り替える。

そういう切り替えが楽にできるような書き方をしている。
45デフォルトの名無しさん:02/04/10 03:13
>>43
いくつかのメッセージと言われてもcase by caseだからなぁ…。
当然、システム標準で変えられるような属性(画面のプロパティ等で)は
対応しないとマズイと思うのだが、それ以外は無視している。
昔、自分の作ったアプリで、子ウィンドウにWM_DESTROYを投げると
落ちるというバグが報告されたが、無視した。
そんなの、システム標準のツールじゃできない事だし。

>>43の言う「いくつかのメッセージ」というのは例えばどんなんだ?
4643:02/04/10 03:17
>>45

> 昔、自分の作ったアプリで、子ウィンドウにWM_DESTROYを投げると
> 落ちるというバグが報告されたが、無視した。
すげーなぁ。そんなこと言ってくる奴がいるのか…
そりゃ無視だろ。

いや俺が言ってるのも、システム標準で変えられるような属性(画面のプロパティ等)
って奴だよ。 >>42の話の中でWindowの幅とか出てたから。
4741:02/04/10 03:22
>>45
43じゃないが。
システムでいろ設定を変えたりするとWM_SYSCOLORCHANGEが投げられてくるが、
3D ColorChanger 3000とかを使って色を変えると、
投げられるのはWM_NCPAINTとWM_PAINTだけだったり、

どんなときに変更されるか予測がつかないから、はっきり言って全部に対応するのは面倒だね。
俺の場合は、
WM_PAINT/WM_NCPAINT/WM_NCACTIVATE/WM_NCHITTEST/WM_SIZE/WM_MOVE/WM_STYLECHANGING
でシステムの設定やスタイルをチェックして、さらにタイマーを使って5秒ごとに監視してる。
>47
随分手が込んでるな。デスクトップマスコット系アプリ?
49デフォルトの名無しさん:02/04/10 03:42
>>47
仕事だったら「WM_SYSCOLORCHANGEを投げてこないアプリが悪い」と言って
無視するなぁ。それに対応する為に色々な事やって、パフォーマンスの低下や
新たなバグを生む原因にしたくないし…。

そもそも>>47は、グローバル変数にシステム情報等を格納している方向なのか?
それなら、その位の対応も納得なのだが…。
タイマーは、ちょっと手が込んでる気がするが…(^^;
50デフォルトの名無しさん:02/04/10 03:51
>>46
42=45だが、システムで変えられる情報の中でもウィンドウの境界の幅は
今まで、誰も気付かなかったような項目だから…って話だったんだけど
説明がわかりにくくてスマソ。
5143:02/04/10 03:59
>>50
そうだったか。要は同じような事を言ってたんだな。失礼しますた。
52デフォルトの名無しさん:02/04/10 04:10
>>50じゃないが、確かにウィンドウの境界の幅は今まで1とかだったから
GetClientRectとGetWindowRectの幅と高さの差(高さは結構あるか…)は
そんなに違いが無くて、ウィンドウのサイズ制限するプログラムとかで
GetWindowRectとか、WM_SIZEメッセージで返ってくるLPARAMの
値を使って制限してると問題が出るね。(後者の方は結構多いと思う)
53デフォルトの名無しさん:02/04/10 19:20
一般的には、ウィンドウサイズの固定はWM_GETMINMAXINFOでやらない?
それに幅は、GetSystemMetricsで取得すればよいと思うが違うのか。
54デフォルトの名無しさん:02/04/10 20:03
>>53
まさに>>50,52の言っていた例のレスだな。
つまり、WM_GETMINMAXINFOメッセージで処理するという事は
LPMINMAXINFO構造体でウィンドウサイズを制御するという事だよね?
その時にptMinTrackSizeに最小値を入れろ…と。
しかし、それではいかんのだよ。わかるかな?>>53よ。
>>50,52の言っている事を良く考えてみよう。
GetSystemMetricsで幅を取得するのも同じだ。
このスレとAPIスレ統合して、Windows Programming 相談室にしねーか?
どっちも閑古鳥が鳴いてるし
GetSystemMetricsはokじゃね?
57デフォルトの名無しさん:02/04/10 21:03
GetSystemMetricsでウィンドウの幅とかを取得しまくるのもOKだと思うが
素直にGetWindowRectとGetClientRectのサイズの差を求めて、最小サイズに
したい値に、その差とクライアントウィンドウのサイズを足したものにするのが
一番良いと思う。GetSystemMetricsでウィンドウの幅とかを取得しまくると
メニューなんかが2行になった時等に対応するのが辛いよ。
58デフォルトの名無しさん:02/04/10 21:04
>>55
別に2つあっても良いんじゃない?
59デフォルトの名無しさん:02/04/10 21:05
>55,58
ここが、part2かAPIスレがbuild3になったら、統合しよう。
いつになる事やら…。
60戸尾理縋り:02/04/10 21:06
外側の幅に合わしてサイズ計算してたら、
中身が
「小っちぇーよ!(三村調)」
枠幅変更をわざわざ考慮してたものはXP以前にゃ
あまりないだろうということだろう
6150:02/04/10 21:08
>>60
そういう事。
>>57
クライアントサイズとウインドウサイズの差というのは落とし穴があるよ。
たとえば、WS_EX_CLIENTEDGEスタイルを持った子ウインドウを
幅高さともに0で作ると、GetClientRect/GetWindowRectが同じサイズ{0, 0}を返すので、
差が求められない。
実際にこれでハマったことあるし。
#論理レイアウトマネージャにウインドウのサイズの管理を任せたりするときにこれにハマった

じゃぁ、最低いくつで作ればいいのかという話になるが、
それこそボーダーの太さに事実上上限が設定されていないので、
どのサイズで作っても保証が無くなる

それこそ、縦横ともにサイズにずれが生じるまでループするしかない。
もっともほぼ無いと言ってもいいようなレアケースだけどね。
ってか、この枠の太さって、Win3.0/3.1位の頃から開発してた人は、
きっちりGetSystemMetricsで取ってくるんじゃないか?
自分はWin3.1から開発してましたが、>>50のように
GetClientRectとGetWindowRectで求めてましたが…。
65デフォルトの名無しさん:02/04/10 21:35
SIZEのcx,cyのcって何よ?(マヂで
coordinate
サンクス
システムトレイをいじくるソフトあるよね。
トレイのアイコン取得する方法教えてください。
みんなはAPIとCRTとどっちが好み?
好みって何だよ
APIとC-runtimeは包括範囲が違うだろ
71デフォルトの名無しさん:02/04/11 02:17
結局ここはMFC or API以外のWindows Programingスレになったの?

こんなの見つけたからage
http://www.fltk.org
かなりマルチプラットフォーム化されてるしGUIビルダもある
Qtはでか過ぎてイヤンという人にお勧めできるんじゃなかろうか
ちなみにC++
本来はWindowsプログラムをする上でのドキュメント化されていないノウハウを語りたかったんじゃないの?
7369:02/04/11 02:36
>>70
いやー、結構重複してる部分あるじゃない。
 CreateFile ≒ open
 CreateProcess ≒ execXX
   …
ぼくはAPI派なんだけど、害虫さんはCRT派でね、
ちなみにGUIアプリでWin以外への移植は無しなの。

どっちが多数派かなーって思って。
どうしても実行ファイルのサイズを小さくしたい場合、
細かくアクセスコントロールを行う場合など、
特殊な状況じゃなければ標準ライブラリを利用する。

APIを使うと引数の数が平気で10個あったり、
いちいち構造体使ったり面倒だから。

誰かに渡したりするのはCRTの方が良いと思うが
それ以外はAPIを使ってるなー。長年Windowsプログラムをしてると
ある程度のパターンができてくるから、APIの引数とかも気にならないし…。
ところで、HINSTANCEの話がでてきて思ったんだけど、グローバル変数を
使ってる場合は、他にはどんなグローバル変数を使ってる?

漏れは…ウィンドウクラス名とかかなぁ…。
グローバル・・・
システムの情報は格納しないな。
アプリケーションの設定を専用クラスでグローバルに置くくらいかな。
文字関係は全部リソースに置いておくし。
77デフォルトの名無しさん:02/04/11 03:25
素朴な疑問。
なんでウインドウクラス名ってグローバル変数なの?
どの本見てもそうなってるけど。
まだ本格的にWin32やってないから、これがグローバルである意味が
よくわかんない。
知ってる人いたら教えて。
その方がお気楽だから。
まぁ、defineでもいいんだけどね。
>>77
別にローカル変数でもいいよ?
つーかそれよりRegisterClass呼んでるのに
なんでUnregisterClassは呼ばないのか疑問。
別に
>別に
余分だった。
81デフォルトの名無しさん:02/04/11 23:35
mallocしたのをfreeしないでexitだな
なんでMFC以外のWindows ProgramingでVCLが
一度も出てこないんだ、ゴラァと言ってみるテスト
>>79
必要ないから。
プロセス終了時に解放されることが保証されている
84デフォルトの名無しさん:02/04/13 15:53
最近むかついてしょうがないんですけど、
LoadImageやCreateWindowはウィンドウズヘッダ内でマクロとして定義されてるんですよね。
だからメンバ関数にLoadImageなんて名前付けるとLoadImageAに変わってしまったり、
CreateWindowなんかコンパイルエラーになってしまいます。
何でインライン関数使わないんだよぉ!
何のための名前空間、何のためのクラスだと思ってんだ。
85デフォルトの名無しさん:02/04/13 15:57
Ruby >>>>>>>>>>>>>>C++
>>84
元々C互換APIだから。
C++でもっとも顕著なのは、STLのstd::min/maxかな。

それから、LoadImageなんてセンスのない名前付けるな
87旧MS-Cユーザ:02/04/13 16:05
LoadImageの方がinline、namespaceより古いから。
名前空間なんかつい最近できたばかりじゃないか。
気持ちはわかるが、>>84は自己中なやつなのだろうな。
age
90ショシンs:02/05/02 01:43
ウィンドウ内に自分でボタンのようなものを作りたいと思い
メッセージプロシージャ関数内の
case WM_LBUTTONDOWN:
の下で現在のマウス位置を取得して
そのあと条件式で自分が指定した矩形領域内でボタンが押されたならば
という形でボタン機能を実現したいと思っているのですが
マウス位置を取得する関数がよくわかりません。
それともlParamかwParamを使えば同じことができるのでしょうか
WM_LBUTTONDOWNメッセージを調べてみる
GetCursorPosを調べてみる
92ショシンs:02/05/02 03:52
アドバイスありがとうございます
最初
case WM_LBUTTONDOWN:
LPPOINT MSpoint;
long msx,msy;
GetCursorPos(MSpoint);
msx=MSpoint->x;
msy=MSpoint->y;
とやったらGetCursorPosの時点でエラーが出てシャットダウンしてしまいました。
その後いろいろと調べたところ
int x,y;
x=LOWORD(lParam);
y=HIWORD(lParam);
とやったらうまくいきました。
とりあえず解決できたのですがなんか複雑な気分です。
なめてんのか?
94ショシンs:02/05/02 03:58
いや、なめてないですよ。
DirectXの勉強を始めたばかりのものでしていまだ使えこなせずにいます。やっぱひとつWINDOWSAPIの説明がいろいろと書いてある本を
買ったほうがいいのですかね。
マジレスするとNE
>LPPOINT MSpoint;
>GetCursorPos(MSpoint);

POINT MSpoint;
GetCursorPos(&MSpoint);
じゃないとだめだYO

それと、GetCursorPosはそのときのカーソルの位置を
かえすけど、lParamはボタンの押された位置がかえるYO
若干ちがくなることがあるので気をつけてね。
あとクライアント座標とかスクリーン座標とかにも気をつけてね。

>WINDOWSAPIの説明がいろいろと書いてある本を
>買ったほうがいいのですかね。
あとDEEPなCの本もNE
>あとDEEPなCの本もNE

いつから、ポインタの基礎・FAQが、DEEPなCの本の扱いに
なったのでしょうか。私は、日本のソフトウエア業界の
逝く末を心配したくなりました。
でたよC厨、
くだらないことで話し広げようとしないでくれる?
C厨が集まっちゃうとスレが死ぬから。

どうせ広げるなら、
「GetMessagePosとかもあるYO。とか」
「これを使えば、コントロールからの通知とかでもちゃんとした
座標が取れる?」とか技術的なコトにしてクンナイ?
98:02/05/02 13:39
win32sdkで
まず、メモリ上に描写を行って、そのあと1度に画面に表示させる。
方法を教えて、
99t=98:02/05/02 13:40
>>DirectX は除く
>>97
GetMessagePosなら、lParamの方がよっぽどいい。
>>99
んじゃ、GDIでやれ。

RECT ClientRect;
::GetClientRect(&ClientRect);
HDC WindowDC = ::GetDC(hwnd);
HDC MemDC = ::CreateCompatibleDC(hdc);
HBITMAP BackBuffer = ::CreateCompatibleBitmap(WindowDC, ClientRect.right, ClientRect.bottom);
HBITMAP OriginalBmp = static_cast<HBITMAP>(::SelectObject(MemDC, BackBuffer));

::DeleteObject(::SelectObject(MemDC, OriginalBmp));
::DeleteDC(MemDC);
::ReleaseDC(WindowDC);
102t:02/05/02 13:49
>>101
それ、面倒なのでもっと簡単な方法教えてください
103t==98:02/05/02 13:51
>>101
thanks
CreateDIBSection、とかもあるけど?
age
age
107デフォルトの名無しさん:02/05/04 20:42
>>102

一番簡単なのはDIB。メモリ上に任意の形式(32bppが扱いやすい)で
フレームバッファを作成して、あとはBITMAPINFO構造体とともにGDI
(SetDIBitsToDevice/StretchDIBits)に渡せば描画できる。
108デフォルトの名無しさん:02/05/05 14:20
現在Windows向けの言語を作っているのですが、
構造体のアラインメントの規則に関する情報ってどこかにないですか?
>>108
Intel のサイトに行って、プロセッサのデータシート見るべし。
>>109
アラインメントじゃなくてパディングって言うのかな?
構造体の中に入る詰め物の情報が知りたいのです。
全部、pack1を期待してもいいのかな、と思いまして。
>>109
その程度の知識で、言語を作る...。何でアライメントするか知ってるか ?
>>111
誤爆?
SSEとかで16byte alignを要求する命令があるてのは知ってますが。
どうしてとかそんなことはあんまり気にしたこと無かったです。

で、今回のはアラインメントとは違ったみたいだけど、
>>110に書いたような構造体の詰め物について知りたいんです。
構造体を引数に取るAPIがどんな並びを期待しているのか。
MSDNを眺めてみたけど、メモリ配置についての情報が、
関数呼び出しの引数などのスタックについてしか見つけられなかったので、
規則がどこかに書いてないのかな、と。

ユーザーdllでは(VCを使った方法しか知りませんが)
#pragma pack(1)
とかでパディングを0にしている物とか、デフォルトのまま利用している物とか、
いろいろあるので、少なくともWindowsのAPIについてはドキュメント化されてないのかな
って思ったわけです。
>>112
ならはじめからそう書いてくれ。言語を作ろうとする奴が、アライメントの
必要性も知らないのはちょっと痛いぞ。まあ、スクリプト言語ぐらいなら
いいのかも知れんがな。

普通、構造体を引数にとる API は、パディングが入らないように構造体を
宣言している。
>>113
ありがとうございます。
PlatformSDKのヘッダを機械翻訳するしかないのかなって思ってたのですが、
いろいろ問題がありそうだったので。

言語と言っても、cへのトランスレータなので、
PCのアーキテクチャについてはあんまり詳しくなくてもいいとか勝手に思ってるんです。
>>114
Win32 API 使おうと思うなら、それ(C のパーサー)は用意した方が良いと
思うぞ。
>>84

古い話題ですが。


API関数
ナニをアレする();

クラスのメンバ関数
class ナニ {
アレする();
};

ぶつかりようがない。ふつうは。
引数も異なるからなかなかぶつからないね。

windows.hがnamespace全然考えてないのは別問題だが、
歴史的経緯というやつでほがもげ
age
>>116 は、ちゃんとまともなこと言ってるのに、>>117 の知ったか厨房が
台無しにしてるな。
>>1116
漏れ、興奮してきたYO!!!
121デフォルトの名無しさん:02/05/11 00:35
あげ
122デフォルトの名無しさん:02/05/11 00:56
1116のレスに期待age
123デフォルトの名無しさん:02/05/11 08:38
>>116
十分ぶつかるよ。
Abstruct FactoryなんかじゃCreateWindowは当たり前に使うし。
124デフォルトの名無しさん:02/05/11 13:26
VC++ 使って CPU 使用率を取得してみようと↓のページの DispTime() を
コピペして main() から呼び出してみたんだが:

http://tokyo.cool.ne.jp/masapico/api_sample_pdh03_c.html

int main(void){
 DispTime();
  return;
}

今度はプログラムが終了しなくなってしまった。ブレークかけてみたら
exit(int) ⇒ dosexit(int,int,int) ⇒ KERNEL32 の中で止まってるみたい。
何か終了処理とか必要なのかな。それとも何かコンパイルオプションが必要?

環境は WinXP Pro, VC++ 6.0 で Win32 Console Application プロジェクトを
新規に作っています。原因分かる人居られますか?
int main()なのに値を返してないから?(ちょっと自信ない)
126116:02/05/11 22:28

>>119
別に117はおかしくないんじゃない?
元の話にはあってないと思うけど。

>>123

いや。俺はそうゆうので困ったことないってだけで、
ぶつかるってんなら文句ゆうつもりはないんだけど...

staitc Window* Window::Create();

なんて書き方じゃ出来ない事をおやりになってるんでしょうねえ。
static WindowFactory::CreateWindow()
なんでないの?(藁
128デフォルトの名無しさん:02/05/12 06:05
C++使ってるならグローバル関数は1つも使う必要がない。
よって::LoadImageでオケ。
129デフォルトの名無しさん:02/05/12 06:15
>>124
Win2000ですが、全然問題なしですた。
俺がやったときは

struct IEditor
{
 virtual IWindow* CreateWindow() = 0;
 virtual IDocument* CreateDocument() = 0;
 // 以下略
};

でぶつかったよ。
>>128
mainもでつか?
132デフォルトの名無しさん:02/05/12 09:32
>>128
sprintf() とか sqrt() とかも使わないのですか?
LoadImageみたいなのはグローバル関数って言わないの?
(LoadImageがマクロなことはおいといて)
134124:02/05/12 12:52
>>125
すまん、たった 4 行だったので油断して鬱氏間違えた。

return EXIT_SUCCESS;

>>129
どうもありがとう。やっぱり XP なのかな。
135デフォルトの名無しさん:02/05/13 03:13
>>131-132
文脈からわかれ。
自分で作る必要がないということだ。
よって少なくとも、自作ライブラリと衝突する可能性はない。
136デフォルトの名無しさん:02/05/13 05:16
俺は自作クラスのメソッド名は動詞部分を小文字にしてる。
まあAPIとぶつかることはないだろうし。
loadImage
createWindow
それはちょっtJavaっぽくてダサイかも
その命名法キモイ
らくだキモイ
>>136
おれもおれも(゚∀゚)
ハッタリッシュ大好きなので(笑

あそこ、もう更新ないのかなぁ…。
>>124
「おー、そんな物もあるんだー」と気になって
自分も試してみたが、
リンカがエラーを吐いてくれた。
#include <pdh.h>はしたんだけど
他にも何か必要なの?

えらーとは
test.obj : error LNK2001: 外部シンボル "_PdhCloseQuery@4" は未解決です
とかいう奴が5個ほどです。
142デフォルトの名無しさん:02/05/18 21:52
age
pdh.lib

なんでライブラリを知らない奴がこんなに多いんだ?
あっちこっちのスレで似たような質問があるが
win32 apiスレに行けば済む話だと思うんだが、なんでこんなところで
やってるんだろうね。
145141:02/05/18 22:10
>>143
すんまそん。それは自分がドキュソだからだと思います。

ちなみに、色々と検索しているときにこんな物見付けました。
>>124さんには役立つでしょうか?
http://support.microsoft.com/default.aspx?scid=http%3a%2f%2fwww.microsoft.com%2fJAPAN%2fsupport%2fkb%2farticles%2fjp312%2f1%2f13.ASP
146124:02/05/31 19:11
>>145
サンクス。環境的に多分それが当たり。
Win2k でやってみたけど、今度は終了時の kernel32 で Access Violation だと… (鬱
147デフォルトの名無しさん:02/05/31 19:22
windows2kのコマンドプロンプトで cl.exeを使ってCのコンパイルをしています。
main()でエラーとか正常終了の戻り値を1とか0とか設定してますが
このmain()に戻った値を確認するためにはどうしたらよいでしょうか?
>>147
C:\hoge> echo %ERRORLEVEL%
>148
うまく行きました。
どうもありがとうございました。
150デフォルトの名無しさん:02/06/10 07:29
WTLって使ってるやつおる?
どっかにいい解説ない?

あれはソースが読めないやつは使うなということなのか...
つかったYO.
でも僕のパソンコんてね、すごく遅いからね、
コンパイルンにイパイ時間がかかて、モウ使わないもアン
っておもったYO!
152 ◆namco08. :02/06/10 17:01
>>150
俺は WTL 使ってるけど。

> あれはソースが読めないやつは使うなということなのか...
そんな気がする。

CWindow, CWindowImpl とかは ATL の範疇なので、書籍「ATL インターナル」
とか MSDN Library に解説がある。あとは WTL のウィザードにソースを吐かせ
て、それを読みつつお勉強、でした。
if (!GetMessage(&msg, NULL, 0, 0))
 return msg.wParam;

if(msg.message == WM_QUIT)
 break;

どう違うんですか?
>>153
GetMessageするか、何もしないでMSG構造体を覗くか
>>153
どうでも良いが GetMessage() はエラー時に -1 を返すので

 !GetMessage()

だと無限ループにハマる可能性があるぞ。
156デフォルトの名無しさん:02/06/14 11:43
Windowsプログラムするときのプログラムの仕組みを教えてください。
メッセージがきて、それに対応するメンバ関数が呼ばれて、メンバ関数で動作を決めて、
みたいなWindowsプログラムのロジックを教えてください。
よろしくお願いいたします。
157デフォルトの名無しさん:02/06/14 17:34
使用しているWindowsのバージョンを返すWin32APIなんてありますかね?
こういうのって普通どうやって調べるんですか?レジストリ?
GetVersionInfoExダッケ
_windver
GetVersionEx()
160157:02/06/14 17:41
うおっ即レスありがとうございます!!
>>156
とりあえず Petzold 本を熟読。
>>156
メンバ関数って言葉が出る当たり、少々誤解してるな。

コントロールはwindowだ。 CreateWindow( )で作ることが出来る。
作ったコントロールは SendMessage( ) 等で操作することが出来る。例えば
SendMessage(editbox_hwnd, WM_UNDO, 0, 0); // edit_box を Undo させる
という感じで。

メッセージは親Windowに届く。届いたメッセージを、if / switch で
分岐させて、処理を行う。例えば
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message){
        case WM_COMMAND:
            switch(LOWORD(wParam)){
                case BUTTON1:
                    // BUTTON1を押したときの処理
                    break;
                case BUTTON2:
                // 以下略

MFC等は、この CreateWindow, SendMessage, 巨大に成るswitch を
ラップしたものだ。
メンバ関数がどうとか言うのは、ラップした後のものについての考えで、
基本的にはもっとフラットな実装だぞ。
163デフォルトの名無しさん:02/06/14 22:20
このスレにいる人たちは、MFCなんて馬鹿らしくて使いませんか?
>>163
便利だとは思うがプログラミングスタイルを固定されるのが好きくない。
OWLの方が良いね。その点では。
165163:02/06/14 22:23
>>164
早速ありがとうございます。
しかし、スタイルが固定されるとはどういうことですか?
M$の方言に悩まされるとかでしょうか?
>>165
ドキュメントビューアーキテクチャとか。
最近は外せるけど。
後、初期化のタイミングが複数あってくはぁ・・・。
ここに書いてもいいのかよくわからないのですが、
いろいろやっていたらコマンドプロンプトの表示がすこし変になってしまいました。
\が/と表示されてたりアルファベットもどき(a等の上に変な印)が表示され、
日本語が表示できなくなったりしました・・・
戻すことはできますか?
いろいろやっていたらコマンドプロンプトの表示がすこし変になってしまいました。
\が/と表示されてたりアルファベットもどき(a等の上に変な印)が表示され、
日本語が表示できなくなりました・・・
戻すことはできますか?
169163:02/06/14 22:29
>ドキュメントビューアーキテクチャとか。
OWLなら関係ないようですが、MFCならこれは確かにそうですね。
初期化はInitInstance()とかですか。
まだまだ私は修行が足りません。
>>167-168
おもいっきり板違いだが、他の板やスレを汚されても困るので、答えてやろう。
jp[enter]
これで直る
>>163
MFCは、CStringを要求するので嫌い。
stlと親和性の高いライブラリがあれば使うかも。
>>170
現在のコードページ:932
と出て一時は直るのですが、
一度プロンプト閉じてもう一度起動すると
元に戻ってます。永続的にはできないのでしょうか?
スレ違いすみません。
class StdString : public CString, public std::string {};
これ使え
>>172
コマンドプロンプトのプロパティを開いて、
オプションタブの現在のコードページで932を選択。
>>174
ありがとうございます。直りました。
本当に感謝します。
ユーザーのドラッグによるWindowサイズの変更をなくしたいのですが、どのようにすればよろしいのでしょうか。
よろしくお願いします。
hit
178デフォルトの名無しさん:02/06/15 15:49
>>176
そういうwindowを作るか、サイズが変更されたらすぐさま戻す。

自由な形のwindowってどうすればいいんでしょうか?
たとえば文字の形とか。
SetWindowRgn
>>178
リージョン切ってSetWindowRgn()
181因幡:02/06/15 16:12
>>179,178
どうもですわ。
182デフォルトの名無しさん:02/06/15 16:15
VC++では標準C++ライブラリは日本語で見れないのですか?
英語読むしかないですか?
183182:02/06/15 16:17
VC++.netです。
>>182
恐らくC++言語で見られると思います。
>>182
VC++を使って標準C+;+を見ることはできません。
MSDNの2002/4には
Standard C++ Library Reference
というリンクがあるのですが、そこの先が英語なのです。
日本語で書いてあるページはないのですか?
探してないからないのか...
>>186
−・


VC++では標準C++ライブラリは日本語で見れないのですか?
英語読むしかないですか?

      | |
      | |

MSDNの2002/4には
Standard C++ Library Reference
というリンクがあるのですが、そこの先が英語なのです。
日本語で書いてあるページはないのですか?
探してないからないのか...
>>187
なんでやすか
>>178
> そういうwindowを作るか、サイズが変更されたらすぐさま戻す。
WM_MINMAXINFO 捕まえて、ウィンドウサイズを上書きするのがスマート
だと思う。これだと描画されないし。
WS_DLGFRAMEとかで作る方がスマートだろ。
制限じゃなくてサイズ変更不可なんだから。
191KK:02/06/18 00:20
Visual C++ 6.0(SDK) / Windows98SE でプログラム作ってます。
みなさん、メモリリークとかの対策はどのようにやってますか?

Purify と BoundsChecker 以外のメモリリークを検出できるツールを
紹介してください。プロセス&スレッドの表示ツールならフリーであるん
ですが、メモリリークまで検出できません。
>>191
_CrtSetDbgFlag()
なんでPurifyやBCじゃダメなの?
漏れはBCを激推奨するが。
>>193
もってないからでわ
195KK:02/06/18 01:30
>>192
ソフトウェアを使うのではなく、プログラムに関数を組み込んで
調べるのですね。どうもありがとうございます。

>>193-194
2〜3万円台の買い求めやすいシェアがあるのかと思いまして。
WWWで一応調べたんですが、適当なのがありませんでした。

今はBCの体験版をDLして使っていますが、個人で購入するとなると
やっぱり高くつきます。Purify:120,000円 BC:80,000円
会社とか研究室で買うならともかく。
しかし、BCもPurifyも高いな。
これらを長く使っていると、自然とリークするコードをあまり書かなくなってくるので、
出番も少なくなってくる。
まぁ、万が一のために持っておくのは良いことだが。
VS.NETとかBCB/DelのProを買うなら、バージョンを一つ飛ばしてでもBCを買っておくと良いと思うが、
そもそも.NETへの転換期なので有効活用できるかどうかは微妙かも。
197KK:02/06/18 02:33
>>196
貴重な意見ありがとうございます。

> これらを長く使っていると、自然とリークするコードを
> あまり書かなくなってくるので出番も少なくなってくる。

ただ、最初のうちはどの箇所に問題があるのか見当もつきません。
慣れれば自ずとなくなるありきたりなミスがほとんどだと思うのですが。

作成したプログラムをBCの体験版でチェックしてみたところ、HBRUSHに関連する
コードに問題があり、リソースリークを起こしていました。
これもWWWを調べたらすぐに見つかりました。

> そもそも.NETへの転換期なので

VC++に固執しないで、色んな開発環境を試してみるのもいいですね。
198デフォルトの名無しさん:02/06/20 18:18
TCP/IP通信をするプログラムを書きたいんですけど、いい解説ページを知りませんか?
書籍紹介、言語違い、OS違い、あるいはMFCなページは簡単に見つかるんですが。
199>198:02/06/20 18:20
WinSock2.0の書籍はだめなんですか?
VC++スレの紹介書籍では?
ただで済まそうとせずに、本買えや。
>>199
それはそうなんですけど、貧乏臭くとりあえず聞いてみました。

まあ、Webにまとまった資料が無いようなら、とりあえず気合で情報集めて
気合でエラーメッセージ読んで、それでもダメなら書籍を買います。
WinSock2.0の書籍買ってきたけど、あれってかなり前のものなんですよね。
WinSockはあれくらいしか見ないから、あれは本当に定番なんだと思う。
EmuTermの作者が書いたのだから損はないと思うけど?
203198:02/06/20 21:44
全会一致で買え、ですね。どうもありがとうございます。
下手に(V)C++の知識とネットワークの知識があると、その中間を埋める書籍の金が惜しくなって。

何とかなるさ、とサンプルを読みつつWinSock2でデタラメにプログラムを
組み始めたのはいいが、DirectPlayの存在に気づく。
どんなものか殆ど知らないけど、元プログラムがDirect3D使っているので
使ってもいいかなと思ったり……。徐々にスレ違い。
(ボヤキsage。でも何かアドバイスあったらありがたく頂きます)
>>203
この人、デムパだね。
>>204 暇そうだね
つーか、何でSocketの本なんて買うんだ?
普通のsocketの使い方+初期化&終了(WSAStartup/WSACleanup)だけっしょ?
>>206
WinSockは、ブロッキングとかいうややこしぃ問題があるから
普通にはいかないと思うが。
208デフォルトの名無しさん:02/07/14 20:01
保守には安芸が一番

質問です。

MFC, WTL の CString と、 std::basic_string<TCHAR>
は、どちらのほうが使い勝手がいいですか?
basic_string。
STLのアルゴリズムと組み合わせ安い
>> 210

ありがとう。
212デフォルトの名無しさん:02/07/23 23:45
質問します。
PatBlt関数の値の限界ってどうなっているのですか?
値が大きすぎると塗りつぶしが出来なくなってしまいます。
何か解決方法はありませんか?
何の値でござりまするか?
とりあえず95系ではGDIの座標系に16ビットだかの制限があったと記憶しておりまする。
±32767超えて LineToとかやると、クネクネな線が描画されたりして、
なかなか楽しいことになる。
(この辺の振る舞いって VGAドライバによるのかな?)
215212:02/07/24 01:05
即レス感謝。
PatBltのxとyの座標の値です。
値を大きくすると塗りつぶしてくれなくなってしまいました。
216すみません:02/07/24 14:35
VC++のC++作成したDLLをVC++のCで作成したコンソールアプリ
からコールしているのですが、プログラムが不正ななんとかで
アベンドしてしまいます。

DLL側のエクスポートした関数は、
int MyDLLfunc(FILE *fp)
{
fprintf(fp, "Call MyDLLfunc()\n");
}
というプログラムになっています。
メインでオープンしたファイルのファイルポインタを
DLLへ渡してDLL側でそのファイルに対して入出力を
行うことは出来ないのでしょうか?
それとも、Cで作ったメインプログラムと、C++で作ったDLL
との間では何らかの制限があるのでしょうか?

どなたか、教えてください。
217自己レス:02/07/24 15:48
なんか駄目みたいですね。
Windowsというか、MSの開発環境の制限っぽいです。
あきらめます。
アベンドってなに?
アボートの友達?
WINAPIとでも書いとけ
>> 218
アベンドって使わない?
アブノーマルエンドの略。
>>219
意味がわかりません。
それをすると回避できるんですか?
それとも、なんかのジョークでしょうか?
>>220
WINAPI int MyDLLfunc(FILE *fp)
って意味じゃないの?
222221:02/07/24 18:41
int WINAPI MyDLLfuncか。
223やってみました:02/07/24 19:11
が、結果は同じく、アプリケーションエラーで
落ちちゃいました。
書き方がまずいんでしょうか?
DLL側
extern "C" MYDLL_API int WINAPI MyDLLfunc(FILE *fpp)
{
fprintf(fpp,"MyDLLfunc start\n");
  return 0;
}
メイン側
#include <stdio.h>
#include <windows.h>
__declspec(dllimport) int WINAPI MyDLLfunc(FILE *fpp);
int main(int argc, char *arrgv[])
{
FILE *fp;
int nrc;
fp = fopen("c:\\tmp\\test.txt","w+");
fprintf(fp,"main start\n");
nrc = MyDLLfunc(fp);
fclose(fp);
}
こんな感じなんですけど。
とあるページには、(ttp://homepage2.nifty.com/DSS/VCPP/DLL/dllfilefp.htm
駄目って書いてあったので、あきらめようかと思っていました。

Windowsって、それぞれの開発ツールが独自に実装してんの? > 標準入出力関数
まぁ、POSIXが定義してる機能なんかをWindowsで使うなってことなのかなぁ。
DLL、Exe共に-MDで解決したりしないカナ?
つうか、なんでファイルポインタを渡すの?
ファイル名渡して、DLL側で開けばいいじゃん
>> 225
私もそう思います。
でも、オリジナル(UNIX版)のソースがそうなちゃってるんです。
メインでエラーログ用のファイルを開けて、いろんなサブルーチンに
そのファイルポインタを渡してそこにエラー情報を吐くと。

それを、いまPCにコンバートしてるわけで。

227デフォルトの名無しさん:02/07/24 21:33
いわいるWindowsプログラムの雛形ってありますよね?
(はじめて目にした時なにもしないアプリなのに、その長さに驚いたアレ)
それは、暗記していつでも書けるようにしたほうがいいんですかね?
それとも、ファイルに保存しといてコピペで流用するのが当たり前ですか?

プロの意見が聞ければなおいいです。
228デフォルトの名無しさん:02/07/24 21:39
>>227
コピペかWizard系のジェネレータがあれば十分。
暗記だけで書かなくちゃいけない場面で、大したもの作れるはずもないし。
そんなもんに血道上げるくらいならもっと他にやることあるだろう。
まあ、理屈がわかってればそのうちなんも見ずに書ける・・・かもしんない。
229227:02/07/24 21:59
>>228
アドバイスどもm(_ _)m
230デフォルトの名無しさん:02/07/24 22:03
>>223
デバッガで見てみれば?
>>223
他のプロセスに値を渡すのはいいけど、アドレスを渡したら、渡されるのは
オフセット値だけであって、セレクタ値は渡されないから、正しくアクセス
できないんじゃない?
232DLLネタで、:02/07/24 22:15
DLLネタで、ちょっと気になったことが有りましてお願いしまーす。

このまえDLLの本体を作成するためC言語(VC++)でプログラム作ってました。
DLLファイルのなかで、下記のようなことしたらエラーになってしまったんです。exit()関数で問題発生^^;

int hoge()
{
  //この付近に処理書いて
  exit(0);
}
結局こいつでエラーになるので return つかったけど
DLL本体のプログラムに使える exit()関数のような関数ってないんですか?

DLL作成の初心者なもんですんません。
>>231
DLL とプロセスって概念が違うぞ。ついでに言っとくと、Win32 だとどうせ
メモリモデルはフラットでやってるからセレクタ値ってあんまり関係ないぞ。
プロセス間のメモリ空間の制御はセグメントじゃなくてページングでやってる
からな。
>>220
> アベンドって使わない?
汎用機系だと常套句だが、それ以外では聞かん。
>232
構造化例外でも投げたら?
236デフォルトの名無しさん:02/07/29 11:51
APIスレが見つからないのでここで。

モーダルダイアログでDestroyWindow使っても問題な動くんだけど、
問題ないかな?

また、WM_DESTROY処理時にEndDialog使ったらおかしいかな?

今作ってるWinプロシージャがモーダルなのかモードレスなのか
いつも気にしながら組むのが馬鹿らしいんで、どんな時でも
DestroyWindow使い、戻り値返したい時だけWM_DESTROY処理時に
EndDialog使おうかと思ったんだけど。

間違ってたら叩いて。
(´-`).。oO(ナンデ
 exit_dialog()
 { if( modal ) EndDialog();
  else DestroyWindow();}
 みたいな仕掛けを作らないんだろう
)
238デフォルトの名無しさん:02/07/29 13:35
if( modal )

modalかどうかって、どうやって判定するのでしょう?
239デフォルトの名無しさん:02/07/29 13:45
ゴメソ

>modalかどうかって、どうやって判定するのでしょう?

modalってどうやって取得するのでしょう?

create時にフラグ立てる? 糞だろし。
微妙に考え方がおかしいな。

> いつも気にしながら組むのが馬鹿らしいんで、どんな時でも
> DestroyWindow使い、戻り値返したい時だけWM_DESTROY処理時に
> EndDialog使おうかと思ったんだけど。

PostQuitMessageはどうしよう。
モーダルの時はDestroyするの普通じゃん
>>241
EndDialogはいつ使うのだ?
>>236
WM_DESTROYの中でEndDialogって、そんなムチャな。
動いてるから問題ないって、プログラマの言うことじゃないよう……

そんなにモーダルとモードレスで分けるのがイヤだったら、
MFCみたいに全部モードレスの世界にしてしまえばいいナリよ。
見た目モーダルっぽくても実体はモードレス。これ。
>>243
しかし、Windows 2000やXPのモーダルダイアログを
開いている最中にオーナーウィンドウをクリックすると
ダイアログが点滅するというサービスが受けられなく
なるという諸刃の剣。
245236:02/07/31 12:55
>>243
プログラマの言うことじゃないけど、実際動いてるんだもの・・・・。

全部モードレスですか、にゃる。

でも、if ( modal ) が出来ればよさげ。

本当に出来るんでしょうか?
どっかグローバルにでもフラグ置いておけ
Create時にフラグたてるのは何でダメなん?
ATL の CDialogImpl 継承して、メンバ変数を新たにつける。
で、Create で作成されたか、 DoModal で作成されたかチェックしておけばいいかと。
249248:02/07/31 15:30
>>248
ATL の CDialogImpl ならそんなことする必要なかった。
鬱だ。

250248:02/07/31 17:30
連続カキコすまぬ。
ATL実装の例

class CMyDialog : public CDialogImpl<CMyDialog>
{
public:
 enum{ IDD=IDD_DIALOG1 }; // ダイアログリソースのID

BEGIN_MSG_MAP( CMyDialog )
  COMMAND_RANGE_HANDLER( ID_OK, ID_CLOSE, OnCloseCmd )
 END_MSG_MAP()

private:
 OnCloseCmd( WORD, WORD wID, HWND, BOOL& )
 {
  if( m_bModal )
   return EndDialog( wID );
  else
   return DestroyWindow();
 }
};

使うとき
CMyDialog myDlg;
myDlg.Create( hWnd );  // モードレス
myDlg.DoModal(); // モーダル
なんでWindowsプログラミングはこんなに覚えることが多いんでつか?
252236:02/07/31 21:04
みんなありがとう。

GetWindowLongとかで情報取得出来るのかなあと思ってたのでした。

基本的に自前でグローバルなフラグをセットね。了解。

250氏、エレガントです。
253デフォルトの名無しさん:02/08/04 21:35
WindowsNT/2000/XPでHKEY_CURRENT_USER\Environment に
直接キーを追加して増やした環境変数を、一度ログオフしなくても
有効にすることってできますか?

システム→詳細→環境変数で追加した場合は、ログインしなおさなくても
有効になっているようなので、できそうなのですが・・
254デフォルトの名無しさん:02/08/04 22:27
ウインドウメッセージをブロードキャストするハンドルがあったと思うのですが、
どういう物でしたっけ?
>>251
参考文献を売ってゲイツが設ける為。
>>255
Microsoft Press の書籍はともかく、他社の書籍だと MS には金入らんぞ。

っつーか、べつに Win32 プログラミングが複雑ってわけでもなかろう。ウィンドウ
システム絡みだと覚えることは増える (X Window System や MacOS だって
参考文献積んだら結構な厚さだ)。
>>256
XやMacOSは情報があまり無いから良いけど、
Winは本によって言ってることが違ったりで読者が惑わされる
>>257
黙って Petzold 読んどけ
259デフォルトの名無しさん:02/08/05 02:39
>>253-254
WM_SETTINGCHANGEを投げる
具体的なパラメータはWM_SETTINGCHANGEの説明に書いてある
でもWin2kSP2では聞かなくなっているという噂
いまさらながら>>1の英語力の素晴らしさがわかるスレタイだ..
www.engrish.com に投稿したくなって来た
261デフォルトの名無しさん:02/08/10 05:03
いまさらながら>>260の厨房さがわかるレスだ....
さらしageたくなって来た
262デフォルトの名無しさん:02/08/10 05:55
問題1:ダイアログを動的に生成したい。
ダイアログテンプレートのエレガントな使用方法を示せ。【10点】
263デフォルトの名無しさん:02/08/10 06:30
>>262
おまえむかつくから教えない。
>>263
教えないんじゃなくてワカランのだろ(w
小学生か。
265デフォルトの名無しさん:02/08/10 15:38
>>264
sageでしかも「(w」かあ。なんかいっぱいいっぱいだね。
まずはエレガントの定義から.
C++を使うようになってもうすぐ1年
今日はじめて構造体のメンバにも関数を入れられることを知りますた
programming
269デフォルトの名無しさん:02/08/11 01:13
>>260=268
かなりの粘着君だな。
知ったかぶりで恥をさらした260=268がいるスレはここですか?
「C/C++(Not MFC) for Windows Programming」

「Windows Programming by C/C++(Not MFC)」
なんでないの?
Windows Programing with C/C++(Not MFC)
マトモな話題に戻ってほしいage
メモリ確保の時に一度に128Mまでしか確保出来ないんですけど
もしかしてこれって積んでるメモリ量に依存?

あと、合計2Gぐらいまでしか確保出来ないんだけど、これはWin98だから?
> メモリ確保の時に一度に128Mまでしか確保出来ないんですけど
それはわからんが、

> あと、合計2Gぐらいまでしか確保出来ないんだけど、これはWin98だから?
これはそう。確かWin9xのアドレス空間ははカーネル2GBユーザ2GBだと思った。
>>275
API は何を使ってる? 確かデフォルトのヒープは 128MB ぐらいしかないが、
HeapCreate() でヒープを作っておけば 1.n GB まで行けるとか聞いた覚えが。
>>277
デフォルトのヒープは勝手に伸びるからそれは違う。
HeapAlloc自体の制限。
279デフォルトの名無しさん:02/08/22 00:02
MFCを使わずAPIを直に呼び出す方法のほうが自由度は高いのでしょうか?
これから勉強しようと思っているのですが仕事で使うわけではないので
生産性は一切気にせずに自由度の高い方を勉強したいのですが
>>279
両方使え。
>>279
MFCにできないことはない
282mother fucker condemned:02/08/22 23:27
出刃椅子銅鑼射場
283デフォルトの名無しさん:02/09/01 21:48
正直、Winプログラマなら常識のことなんだろうけど… やっちまいました。
開発環境がWin2kで、Unicode専用でプログラム組んで半分くらい完成したので、
知り合いにテストしてもらったところWin9x系が全滅。。
Unicodeが使えないなんて知らなかった(汗 ←駄目グラマ
CreateWindowExWすら動かないなんて。。 首つるしかないぽ。。
TextOutWとかはUNICODE使えるんで、
手直ししなさい
Unicode Layer For Win9Xとかつかえば?
MessageBoxWは動くから
MSLU入れろやゴルァというメッセージを出して終了するとか

Microsoft Layer for Unicode
http://www.microsoft.com/globaldev/articles/mslu_announce.asp
>>286
その前に、プログラム起動時に DLL のシンボル解決に失敗してダイアログが
出てしまいそうな予感。
288283:02/09/02 08:04
うひょー。そんなものがあったとは。。
最初unicows.libがどこにも見つからなくて戸惑いましたが、
最新SDKにunicows.libが入っててリンクしたらWin98でも動きました。
微妙に見た目が違うけど、動いたから十分満足です〜
>>284-287さんありがとうございました!
>>287
Unicode APIは(というかNT 3.5までにあったものは全部)9xでも
ERROR_CALL_NOT_IMPLEMENTEDを返すだけのスタブがあるから
大丈夫
メニュー項目を動的に追加する時、どの範囲で ID を割り振れば安全なんでしょう。
リソースエディタはコントロールに 1001 以上、メニュー項目に 40001 以上
の ID を割り当てるようですが、安全な範囲って 0 〜 1000 だけなんでしょか?
メッセージの WM_USER や WM_APP のような標準的なルールってないものでしょうか?
291デフォルトの名無しさん:02/09/19 03:51
SDKでフレームを実現するにはどうすれば良いのでしょう?
因みにフレームとはウインドウを仕切るフレームのバーの事を指しています。
あるWindows用のネットワークゲームのGPSの様な
物を作ろうと思っているのですが、
HPなどのアドレスは事前に分かっているとして、(例えばLvは0065e43c)
どのようにすれば他アプリケーションの値を取得できるのでしょうか?
ReadProcessMemory
294デフォルトの名無しさん:02/09/27 15:32
GetProcessByNameを使用して配列に収めたのですが、
そこからどうやって特定のプロセスに絞り込むのでしょうか?

例えばメモ帳がいくつか開いていて、そのうちに一つだけ
という場合はどのようにすればよろしいですか
>>294
> そこからどうやって特定のプロセスに絞り込むのでしょうか?
絞り込むというからには何らかの基準があると思うが、それは何?
296デフォルトの名無しさん:02/09/27 18:00
InterlockedExchangeAdd で1ずつ足すほうが InterlockedIncrement よりも早い(w2k athlon)んですが
みなさんの所もそうですか?
C++でMFC使わなかったらどうなのよ
しぬんじゃねーの?
>>297
自分でライブラリ久米
299名無し@沢村:02/09/27 20:54
皆様方、ボタンなのですが、ボタンは子ウインドウなのでマウスでクリックしたとき、そのウインドウのハンドルを取得したいのですが、どうすればできますか?
いろいろなボタンをクリックしたときに、そのボタンに応じたハンドルを取得できますか?
win32 apiスレに池
>>297
俺は ATL/WTL が好きだ。
age
303デフォルトの名無しさん:02/10/15 19:53
マウスイベント発生時のマウスカーソルの位置を取得したいのですが、
WM_LBUTTONDOWNなどで得られる座標(LOWORD(lParam),HIWORD(lParam))は
ウィンドウ左上からの相対座標で型はWORD(符号なし16ビット整数)ですよね。
マウスポインタがウィンドウよりも左(あるいは上)に行った場合
得られる座標がとんでもない値(USHRT_MAX??)になるのですが
何か解決する流儀みたいなものはあるのでしょうか?
ちゃんとGET_X_LPARAM, GET_Y_LPARAM使ってる?
型はWORDと違うよ。
305303:02/10/15 20:05
そんな便利な関数があったんですか・・・。恩にきります。
306303:02/10/15 20:10
調べてみたら"GET_?_LPARAM"って16ビット符号なし整数を
16ビット符号付き整数にキャストした上で
32ビット符号付き整数にキャストするただのマクロなんですね・・・。
307デフォルトの名無しさん:02/10/18 18:56
リッチエディットにEM_EXSETSEL飛ばしたら勝手にスクロールするぞ?
↓の説明と完全逆じゃねぇ?(参照先MFCのでスマソ)
http://www.microsoft.com/japan/developer/library/vcmfc/_mfc_cricheditctrl.3a3a.setsel.htm
Windows
揚げてみる
Windows イイ!!!
311名無し@沢村:02/11/09 20:30
皆々様方〜私はいまmidiシーケンサーをつくっているのですが、もうすぐ完成しそうなんで、それが終わったら今度はInternet Explorerのプラグインをつくりたいと思いついたのですよ。
例えばタグで<BGSOUND SRC="aa.mld" LOOP="-1" >と指定したらホームページから携帯の着メロディが流れてくるようにしたいんですよ。でもプラグインなんてつくったことないし、Internet Explorerのプラグインをつるにはどうすればいいか教えてください。
あ、その前にwindouw板の普通のmldプレイヤーをつくるほうが簡単そうだから、先につくろうっと…。
311 マルチうぜぇ
313デフォルトの名無しさん:02/11/12 07:16
同じウィンドウを複数回 CreateWindow() すると、ウィンドウプロシージャで
static 変数やらグローバル変数やらがほぼ使えなくなりますが、うまく回避する
方法はありますか?
メモリを動的に確保して GetWindowLong(GWL_USERDATA) に放り込むしかない
ですか?
>>313
それしかないでつ。
ただ、データの個数が少ないのなら、メモリ確保せずに
ウィンドウデータに直接放り込む方法もある。
WNDCLASSのcbWndExtraに 4*N の値を指定しておけば、
GetWindowLongで 0 〜 4*(N-1) までを好きに使えるようになるよ。
315313:02/11/13 04:19
レスあんがとです。
格納したいのはそれなりの長さのテキストとその他なので、cbWndExtra は諦めます。
316デフォルトの名無しさん:02/11/13 13:35
不可視のウィンドウを作って、WM_SETTEXT を無視、WM_GETTEXT で任意の
文字列を返す、という事をやりたいのですが、どうもうまく行きません。

ウィンドウプロシージャでこれらのメッセージを捕まえようとしても、外部プロセス
からの SendMessage() では普通にテキスト設定/取得されてしまいます。
(ウィンドウプロシージャにメッセージが届いていないようです)
一方、プロセス内部からの SendMessage() では、きちんとウィンドウプロシージャ
にメッセージが届き、期待通りの動作をします。

何がいけないのでしょうか。

LRESULT CALLBACK StringGiverWindowProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
 static LPCSTR GivingText = NULL;
 switch(Message)
 {
  case WM_CREATE:
   GivingText = (LPCSTR)((CREATESTRUCT *)lParam)->lpCreateParams);
   break;
  case WM_GETTEXT:
    if(lParam && GivingText)
     return (LRESULT)strncpy((LPSTR)lParam, GivingText, (size_t)wParam);
   break;
  case WM_SETTEXT:
   break;
  default:
   return(DefWindowProc(hWnd, Message, wParam, lParam));
 }
 return 0;
}
317デフォルトの名無しさん:02/11/15 03:31
先日Win32API質問スレでも質問させていただいたのですが
回答が得られなかったので、こちらで質問させていただきます。
少しお聞きしたいのですが、
WindowsXPproでユーザーアカウントの画像を
ランダムに変更するプログラムを作りたいんですよ。
それでレジストリ書き換えて
(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Hints\(ユーザー名)\PictureSource)
C:\Documents and Settings\All Users\Application Data\Microsoft\User Account Pictures\ユーザー名.bmp
のフォルダに画像を生成させるとこまではできたのですが、
そのあと表示を更新させる方法がわかりません。
手動でなら、
コンパネ→タスクバーのプロパティ→スタートメニューのカスタマイズ
を開いて全てOKでとじれば更新されるのですが・・・。
どなたかご存じの方がいらっしゃれば宜しくお願いします。
318デフォルトの名無しさん:02/11/15 07:05
教えてください。

ファイル名と他アプリケーションのウィンドウハンドルがわかっているときに、
その他アプリケーションにファイルをドロップしたことにするような
メッセージを送りたいんだけど、可能でしょうか。どうやればいいんでしょうか。
>>318
メッセージを送ればいいだけだが、いったい何を聞きたいのかわからん
注意点はプロセスメモリーの排他制御で文字列ポインタの扱いに気を付けるくらい
>>319
WM_DROPFILES を送りたいって話だろ。
方法は漏れも知りたい。
322318:02/11/16 09:43
APIスレに書くべきだったかもしれません。すみませんでした。

>>319
書き方が悪くてすみませんでした。
ドロップを受けるときはメッセージとして受けるので、
ドロップさせるときもそのメッセージを送ればいいんだろうと思ったんですが、
その先どうしたらいいのかわからなくて。

>>320
そうなんです。ありがとうございました。
318を書いた後
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/Shell/reference/messages/wm_dropfiles.asp
まではたどり着いたんですが、結局HDROPの正体がわからなくて。

>>321
これです。ありがとうございます。
目的もここの方と一緒です。早速試してみます。
323320:02/11/16 09:46
>321
おお。
でも、将来 HDROP の実装が変わったりしてたらイヤだな・・・。
OS バージョンのチェックでも入れればいいのか。
324316:02/11/18 19:52
API スレに移動しまつ
325デフォルトの名無しさん:02/11/20 16:32
初歩的なことかと思いますが質問させてください

VC++6.0を使ってプログラムを作成しているのですが、
最近は自前の関数群が色々なアプリに使いまわせるようになって良い気分です。

ですが使っていない関数までコンパイルしてしまっている(ひとつのcppファイルに色々な関数が書いてあるので)のが
気になります。
これはVC++が自動判断して除外してくれているものなのでしょうか。
326デフォルトの名無しさん:02/11/20 16:42
>>325
.obj 単位でリンクされるみたい。
だから、関数単位に分割コンパイルして、.lib を作るといいんじゃない?
>>325
関数単位のリンクが出来る。
ビルドオプション見てみ。

あと使い回すならライブラリにしとけ。
328325:02/11/20 18:11
すばやいお返事ありがとうございます
libですか。静的リンクとかいう奴ですね
あれなら使わない関数はリンクされずに済むのですか?
そうならすごい便利だと思います
>>326が知ったかするから>>328が勘違いしてるし
330327:02/11/21 13:07
>>328
ライブラリにするかどうかとは関係ない。
使い回すならライブラリにしておくと便利なだけ。

オプション設定しておかないとobj(cpp)単位でリンクされる。
libはobjまとめてるだけだから。

331デフォルトの名無しさん:02/11/22 09:15
>>330
>関数単位に分割コンパイルして、.lib を作るといいんじゃない
>関数単位に分割コンパイルして
>関数単位に分割

OK?
332デフォルトの名無しさん:02/11/22 09:41
>>326 = 331
オプションでできるのに関数単位に分割して・・ってことが知ったかってことでは?
333bloom:02/11/22 09:44
関数単位でリンクってさ、static変数とかの依存関係も考慮してくれるか?
それは関数内で static 宣言した変数がその関数と一緒に削除されてしまわないかってことか?
リンクするときに参照されてないシンボルを検索するんだから、変数が参照されていれば削除はされないだろ。
大体、コンパイルされた段階でその関数と変数は別のところにある。
336名無し@沢村:02/11/24 00:11
皆々様方〜、私はいま複数のトラックを鳴らすところで大変苦労してるんですが、なんとか同時に複数のトラックを鳴らすとこまではできたのですよ。
でもあともう一歩なんです…!
もう一歩というのは、トラック2つでもシングルトラックを鳴らすのに比べて、速度が半分に落ちるし、鳴り方もぎこちないんです…。
これがそのコードですが、あとどこを直せばいい…?
教えてくだされ〜♪

for(i=0;i<=i_Sum_Track[i_longest_Track];i+=2)
{_Time= timeGetTime();
for(l=0;l<16;l++)
{t[l]=0;
for(j_i=0;j_i<Onpu_Index[i_longest_Track];j_i++)
{k[l]=j[l]*8;
if(CodeCount[l]!=0)
{if(i==t[l])
{midiOutShortMsg(hMidiOut, 0xC0+l+ ((i_gattuki[l]) * 0x100));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((7) * 0x100)+((possrider[l]) * 0x10000));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((8) * 0x100)+((possrider_b[l]) * 0x10000));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((10) * 0x100)+((possrider_s[l]) * 0x10000));
midiOutShortMsg(hMidiOut, (DataCode[l][k[l]]) + (DataCode[l][k[l]+1] * 0x100)+(DataCode[l][k[l]+2] * 0x10000)); // Note On
}
t[l]+=DataCode[l][k[l]+3];
if(i==t[l])
{while (Play_Tempo(DataCode[l][k[l]+3])>=timeGetTime()-_Time);
midiOutShortMsg(hMidiOut,(DataCode[l][k[l]+4])+ (DataCode[l][k[l]+5] * 0x100)+(DataCode[l][k[l]+6] * 0x10000)); // Note Off
j[l]++;
}}}}}
337デフォルトの名無しさん:02/11/24 00:21
別のスレに書いたのですが無視されてしまったのでこちらで質問させていただきます。
SetROP2関数で描画モードを変更するのはペンにたいして有効なのでしょうか?
ブラシはかんけいないのでしょうか?
>>336
こんなの見ようと思う香具師はいるのか?(w
>>338
ソースの前に日本語の部分からして読む気になれない。
そもそもマルチだしな。
340デフォルトの名無しさん:02/11/26 22:34
今テキストエディタクラス作ってるんだけど、描画処理が重くて重くて。
EDITクラスはGetDCして書き換えてみるみたいだけど、
皆さんはメモリDCに描画したのをBitBltしてんの?

でも、見えてない(スクロールアウトされた)領域や、
行右側のスペースまで持っとくのは無駄が多すぎると思うし・・・
行毎にCreateComatibileBitmapして、
SelectObject(hMemDC,hCompBMP)してもそれほどコスト掛からない?
それとも、描画する場所や方法を最適化してる?
描画が重いなんて信じられない
まさか文字入力があったりするたびに全領域書き直してる?
342デフォルトの名無しさん:02/11/26 22:46
C + Win32APIを使ってプログラムをしていますが、
Exeを実行したときのパスってどうやって取得したらよいですか?
MFCを使っていたときはAfxGetApp()->m_pszHelpFilePathを使って
ちょこちょこいじって取得していたのですが…。
343342:02/11/26 23:13
GetCurrentDirectory()っていうのがあった…。
スマソ。
ブブー
345342:02/11/26 23:21
>>344
> ブブー
それは俺に言ってるの?
いや、確かにコンソールから実行したらおかしくなるし、
完璧じゃないんだけど…。

他にいい方法あるの?
346デフォルトの名無しさん:02/11/26 23:24
>>345
Advanced Windowsに詳しく書いてあります
げっともぢゅーるふぁいるねーむ
348342:02/11/26 23:29
>>346
> Advanced Windowsに詳しく書いてあります

本は持ってないんだけど、
2.2.6 プロセスのカレントドライブ、ディレクトリ
・プロセスのカレントディレクトリ
この部分に情報があるってことか?

取得って結構めんどくさいの?
ちょろっとサマリだけでも教えてくれると楽なんだが…。
349342:02/11/26 23:30
>>347
> げっともぢゅーるふぁいるねーむ

お、ちょっと試してみる。
350342:02/11/26 23:33
>>347
できました。ありがとうございます。
>>340がやっていることの予想
case WM_PAINT:
hdc=BeginPaint(・・・);
while(*lpText){
・・・
TextOut(hdc,・・・);
・・・
}
Endpaint(・・・);
break;

(;´Д`)重い重い・・・
352デフォルトの名無しさん:02/11/27 00:12
char szr[512];
char *cp;
cp = strchr(szr, '\n');
このプログラムの szr を CString で表すには
どう工夫すべきでしょうか?
353デフォルトの名無しさん:02/11/27 00:31
エディットボックスとかリストとかで選択するとその部分が
反転しますが。その反転部分の色を変更する方法を教えて
ください。
CString szr = ...;
int pos = szr.Find('\n');
355340:02/11/27 09:30
>>342
現在のプロセス(.exeモジュール)のパス?
だったらGetModuleFileNameで取得。

モジュールがあるディレクトリを取得するなら、
GetModuleFileName
GetFullPathName
_splitpath(path,drive,dir,NULL,NULL)
_makepath(dir,drive,dir,NULL,NULL)
で良いはず。
356340:02/11/27 09:33
>>353
アイテムはGetSysColor(COLOR_HIGHLIGHT)、
文字はGetSysColor(COLOR_HIGHLIGHT)で取得できる。
ってこのぐらい自分で調べてね。はーと
357340:02/11/27 09:48
おっと文字の方はCOLOR_HIGHLIGHTTEXTね。

>>351
まあ今の所はそうですが、
幾らなんでも100行もないのに10秒オーバーなんて・・・

>>341

いやそれが、色分けサポート予定なんで、
行毎にテキストバッファと、
VisualInfo* vi
int pos
int len
な構造体のリストを格納して、1文字ずつ描画処理してる。
もちろん、該当番号がきた時にSelectObjectなり、SetTextColorしてる。

重い原因として考えられるのは、1文字ずつ描画する為に、
文字の左が消えないように、SetBkModeでTRANSPARENTして、
文字描画にFillRectしてることぐらいかな。
358デフォルトの名無しさん:02/11/27 12:33
>>354
char *cp;
はそのまま使いたいのです。
これが問題点。
タイトル変な文章だな
>>358
そういう事はすべきではない。
>>357
色分けしていると言っても、描画にかかる負荷は大した物ではない。
というか、10秒なんて何かが間違っているとしか言えないな

エディタで重いのは、
プロポーショナルならフォントから文字幅を取得するところと、
編集による文字列のコピーが多発する所。
あとは、ブロックコメントの範囲解析とかそんなところだけ

>重い原因として考えられるのは、1文字ずつ描画する為に、

同じ修飾情報を利用するときは、
1文字ずつでなくまとめて描画するのが普通では?

>文字の左が消えないように、SetBkModeでTRANSPARENTして、

意味不明だけど、1文字ずつの描画で位置あわせをしていると言うこと?
それならば、ExtTextOutで位置あわせをするべき

>文字描画にFillRectしてることぐらいかな。

背景の間違いか?
だとするとExtTextOutで一発。

それから、俺の場合は画面の描画にはメモリDCを使わずに
直接ウインドウDCに書き込むようにしている

>>356
取得と設定勘違いしてないか?
>>358
CString str = ...;
int pos = str.Find('\n');
char szr[512];
strncpy(szr, str, 511);
szr[511] = '\0';
char* cp = szr + pos;

または

CString str = ...;
char* cp = str + str.Find('\n');

後者の場合、cpはstrを変更するまでの間有効
363340:02/11/27 13:23
>>361
FillRectは背景色のためです。可変幅の文字を出力すると、
GetTextExtentPoint32で取得したのより左に背景色が塗られるので、
左の文字やそのアンダーラインの右側が背景色で潰されてしまうんです。
TextOutExtを使えば解決できます?
364340:02/11/27 13:37
>>361
> >>356
> 取得と設定勘違いしてないか?
ほんとだ、"変更する方法"になってる・・・欝死。

なら、SetSysColorsで変更できるけど、
この関数は現在のウィンドウズセッション中だけ有効(保存されない)ので、
直接wininiなりレジストリなりを書き換えるしか無かったと思う。
ちなみに、Windows 2000/XP(NT4も?)なら、
HKEY_CURRENT_USER\Control Panel\Colors
にある。

ところでひょっとして、自前ウィンドウ内のコントロールでの話?
だったらオーナードローにして描くしかないんじゃ・・・
コントロールの色変更はWM_CTLCOLOR*のハンドリングの方が一般的じゃないか?
366340:02/11/27 13:55
>>365
でもそれじゃ選択された項目の色は変更できないでしょ?
367デフォルトの名無しさん:02/11/27 14:26
>>362
char* cp = str + str.Find('\n');
'+' のオーバーロード関数があいまいです。
>>367
だから、そういう事をするな。

>>362
そういう事を教えるな。
>>367
operator LPSTRが定義されてるんで、キャストでも汁
LPCTSTRだと思漏れ
ってかここnotMFCじゃないの?
普通のWin32APIの質問もあるようだし・・・
ATLかも知れぬ
372353:02/11/27 17:33
>>356
>>361
レス&フォローさんくす。
なんか全ウインドウに関わる変更みたいなんで、FOCUS
で切り替える(元に戻す)ようにやってみるよ。
動的に色の変更すると重そうだけどそのときは別の方法を
考えるかな。
373340:02/11/27 18:39
失礼。どうやらシステムの問題だったみたい。
今起動してみたらちゃんと1秒前後で全行描画できる。
でもどの道描画重かったので、大変参考になりました。
とりあえず、ExtTextOut使う&出来るだけ連続して描画してみる。
374デフォルトの名無しさん:02/11/27 20:03
VBAプログラムをC++にコーディングしてるんだけど
さっぱりわからないところハケーン

CreateObjectを使ってObject型変数にOracleのオブジェクト突っ込んでたんだけど
C++にするのってどうすればいいの?
自前で調べてもVBのしか出なくてさっぱりわからんですYO!

CreateObjectのライブラリやヘッダ(があれば)教えて下さいな


実はスレ違いなら正スレ教えて下され。
実はも何も、C/C++ と書いてあるのが目に入らないか?
VB スレに逝け。
376375:02/11/27 20:32
ごめん、違かったね。
でも、よくわからんが OLE の話じゃないか?
CoCreateInstanceダロ
正直言ってC++だと開発効率悪いからVBで作れ。
379374:02/11/27 21:14
>>377
サンクスです!こっから先は気合でのりきる予定でがんがります
380名無し@沢村:02/11/28 00:34
皆々様方〜、ツールバーだが、ツールバーにビットマップを標示すると、
色が表示されずにグレーになったり、使ってるうちにだんだんイロがあせてきたりすることがあるんだが、
これはどうやったら直せるのですか?
ちなみに画面のプロパティの詳細は256色です。
皆々様方〜、教えてくださらんか〜!
皆々様方〜♪
>>380
モニタを買い換えろ。
また沢村かよ・・・
>>380 256色が関係あるって自分で分かっているんだろ。
ベクターからとあるサンプルプログラムセットをダウンロードしてきて勉強中なんだけど、
エラーが出るプログラムがありますた。

>> //システムメニューの「サイズ変更」を削除
>> DeleteMenu (GetSystemMenu(hwnd, false), SC_SIZE, MF_BYCOMMAND);
の部分が、

>>エラー E2451 Sample10.c 165: 未定義のシンボル false(関数 WindowsProc )
と、コンパイル通りません。コンパイラはbcc5.5使っていまつ。
385名無し@沢村:02/11/28 20:45
皆々様方〜、いろいろありあとうございました、皆々様方〜!
私はここでコールバックタイマーを使用しろとか、複数トラックのデータをマージしてひとつのデータにまとめろとか、いろいろなアドバイスをいただきました。
でもはっきりいってそんな面倒なことはしたくなかったんです…。
はっきりいって手抜きに近い楽なやりかたで複数トラックをちゃんと演奏する方法を見つけたかったんです。
でもついにその方法が見つかったんです!!
その完璧なルーチンをここに乗せますから、皆様方も楽にmidiシーケンサーをつくるときの参考にしてください、皆々様方〜!

for(i=0;i<=i_Sum_Track[i_longest_Track];i++)
{for(l=0;l<16;l++)
{t[l]=0;
if(CodeCount[l]!=0)
{for(jj[l]=0;jj[l]<Onpu_Index[l];jj[l]++)
{kk[l]=jj[l]*8;
if(i==t[l] )
{
_Multi_Time[l]= timeGetTime();
midiOutShortMsg(hMidiOut, 0xC0+l+ ((i_gattuki[l]) * 0x100));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((7) * 0x100)+((possrider[l]) * 0x10000));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((8) * 0x100)+((possrider_b[l]) * 0x10000));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((10) * 0x100)+((possrider_s[l]) * 0x10000));
midiOutShortMsg(hMidiOut, (DataCode[l][kk[l]]) + (DataCode[l][kk[l]+1] * 0x100)+(DataCode[l][kk[l]+2] * 0x10000)); // Note On}
t[l]+=DataCode[l][kk[l]+3];
if(i==t[l] ) { while (Play_Tempo(DataCode[l][kk[l]+3])>=timeGetTime()-_Multi_Time[l]);
midiOutShortMsg(hMidiOut,(DataCode[l][kk[l]+4])+ (DataCode[l][kk[l]+5] * 0x100)+(DataCode[l][kk[l]+6] * 0x10000)); // Note Off } }} }}
>>384
false→FALSE
>>384
#define FALSE 0
だからC++でコンパイルすれば通るかもな(藁
>>386
途方に暮れていたので、本当に助かりました。
ありがとうございました。
>387
ありがとうございます。cppなら通りました。
390387:02/11/28 22:00
>>389
FALSEに直しとけよ。
っていうか、悪い事言わないから、
http://www.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/jpuipf/_win32_deletemenu.htm
見とけ。
つかなんでエラー表示で、

・・・未定義のシンボル false(・・

と出ているのに、falseで検索かけてみようとか思わないんだ?
それが不思議。
>>391
はじめてCに触れてコンパイルしてみたけれど、falseのところでエラーがでる。
んで、"false"で検索かけてみたらページがヒットしすぎてマズー

っていうところなんじゃないのかな?
がんばれ>>389
>>390
なぜ DeleteMenu ?
394390:02/12/01 12:05
本当だ。GetSystemMenuじゃなきゃ意味不明だな。
DLL のことを 「スタットレス」 と呼ぶ人がいるんですがいかがなものでしょうか?
>>395
どうしてそんな呼び名になったんだ?
どうも、「スタティック」 との対比らしいんですけど・・・
英語が不自由な池沼だろ。生暖かい目で放置してやれ
399デフォルトの名無しさん:02/12/03 00:23
滑りにくいタイヤのことを 「スタットレス」 と呼ぶ人がいるんですがいかがなものでしょうか?
>>399
どうしてそんな呼び名になったんだ?
どうも、「スタティック」 との対比らしいんですけど・・・
402外部シンボル:02/12/05 19:20
スミマセン、質問なんですが。
Windowsでclass内のメンバ関数にHWNDやHINSTANCEを渡すと、
そこで外部シンボルエラーが出てしまいます。
試したOSは98SEです。
そして、同じVC6++の入っている2000マシンでソースを何も弄らずにコンパイルすると、
今度は何事も無く通りました。
出来あがったOBJファイルのみを98環境に持って来てリンクのみさせた場合も同じく動きました。
以上のことから察するには、98環境では何らかの処置をしないと正しいOBJファイルが作れないのでは?と思いました。
2000マシンが会社のマシンということで、何とか自宅の98マシンでコンパイル&リンクを通したいのですが、
暫くHELP等を見て悶々と考えていたのですが、未だ解決せず。
何か解決策がありましたらご教授下さい。
単に2つのマシンでlibとかincludeとかSDKとかが違うだけだろ。
OSは関係ねーって。
どんなエラーが出るのか具体的に書けよ。
404402:02/12/05 20:11
申し訳ありません。
このようなエラーが出ました。
リンク中...
main.obj : error LNK2001: 外部シンボル ""public: bool __thiscall InitDevice::InitD(struct HWND__ *)" (?InitD@InitDevice@@QAE_NPAUHWND__@@@Z)" は未解決です
Debug/My.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

2つのマシンはOS以外はほぼ同じ環境です。
lib等は二つを並べて確認したわけではないので、それは早速明日確認してみます。
ありがとうございました。
405402:02/12/05 20:20
自己補足ですが、
クラスを解いてただの関数化した場合はちゃんとリンクまで通りました。
なので、libとか、その辺の張り忘れではないと思います。
クラス化して、メンバ関数にHWNDを渡したときのみ、上記のエラーが出ます。
(その他のint等の場合は出ない)
リビルドしてみるとか?
407402:02/12/05 20:52
はい、リビルドもしてみました。
手動でDebug内のファイルを全部消してもやってみましたが、
やはり同じエラーで終了してしまいました。
クラス→普通の関数に直すとどうやってもリンクも通ります。
ただ、ソースの管理上クラス化してあったほうがありがたいです。
どうしても原因が解らなかった場合は、仕方ないので関数のまま使おうとは思っています。
InitDの宣言と定義を晒してみてはどうだろう
409402:02/12/05 21:13
縦に多少伸びてしまいますが…。

//ClsInitDevice.h内
#include <windows.h>

class InitDevice{

public:
 bool InitD(HWND hWnd);
};

//ClsInitDevice.cpp内
bool InitDevice::InitD(HWND hWnd)
{

return true;
}

//main内
#include "ClsInitDevice.h"

InitDeviceID,*pID;
pID= &ID;

if(!(pID->InitD(hWnd))) return 0;

…の部分は特に問題ないと思うので省かせていただきました。
他のメンバ関数は正常に呼び出せれるので、そこも省きました。
以上が問題が起きているるメンバ関数に関する部分です。
410402:02/12/05 21:16
訂正
InitDevice ID, *pID;
は離れています。
TABのままコピーしたらくっついてしまった…。
411デフォルトの名無しさん:02/12/05 21:16
質問です

RS232Cを使ってデータ転送をしたいのですがC言語でどのように書き込めば良いか分かりません
javaやVBだとライブラリ関数があるようなんですけど,Cだとないっぽいです.
ちなみにDOSで動かそうと思っております.

知ってる人お願いします…
実はclsinitdevice.cppがリンクされてないとか、そんな話ではないだろうし、、
413デフォルトの名無しさん:02/12/05 21:36
>>402
プロジェクトの設定で
ClsInitDevice.cpp
の「このファイルをビルドしない」にチェックいれてないか?
414402:02/12/05 21:38
あ、コピーし忘れていました。
//ClsInitDevice.cpp内
#include "ClsInitDevice.h"

他のクラス(そっちはHWNDとか全然渡さない)も全く同じ記述方法で作成しているのですが、
問題なく動いています。
一度、InitD(void)として、別の関数でHWNDだけ新しく作ったメンバに渡してやろうとしたら、
今度はそっちがエラーを出すようになり、結局元に戻しました。
ちなみにHWNDを渡さず、メンバ内で使用している所をコメント化するとリンクまで行きます。
そんなわけでHWND付近が怪しいと睨んでいるのですが…。
Windows2000買うって方法は駄目なの?
416402:02/12/05 21:42
>このファイルをビルドしない
いえ、そんなことはありませんでした。
チェックは入っていません。
417402:02/12/05 21:47
>Windows2000
以前に購入済みなのですが、
インストールの際にどうしてもCD読みこみエラーが出てしまい、断念しました。
特にCDが汚れているわけでもなく(メディア・ドライブ同様)10数回試しましたが結局うまく行きませんでした。
98は普通にインストール出来るので、引き続き98を使用しています。
試しに友人から借りたXPもインストールしてみたのですが、やはりCD読みこみエラーが出てしまいました。
そんなわけで、今も本棚の片隅で眠りつづけています>2000
出来れば2000を使いたいんですけどね…。
おいおい、正規に購入したのなら返品して交換してもらえよ・・・。
>>416
別のクラスを定義して
HWNDを使うメンバを追加しても同じエラーが出る?
InitDeviceID,*pID;
420に期待 (・∀・)ニヤニヤ
422402:02/12/05 21:58
>交換
はい、製品のプレスミスなら交換してもらおうと思い、
検証を取るために会社の現在使用していないPCに試しにインストールしてみたところ、
正常にインストールできました。
また、会社の備品のWin2000をお借りして自宅PCにインストールしてみたところ、
やはりCD読みこみエラーが出てしまいました。
しかし、98のCDを始めとする他のCDで読み取り不可になったことはありません。
98がインストールできなければ、ドライブ不良となるのですが、
そんな状況で何が原因なのか検討がつかず、結局交換もしていないというわけです。
423402:02/12/05 22:06
>419さん
はい。
エラーの出る場所が変わるだけです。
HWNDを渡す部分にエラーが出てきます。
ちなみに、試しにHINSTANCEも渡してみたところ、同様のエラーが出ました。

>420さん、421さん
スミマセン、InitDeviceID,*pIDはコピーミスです。
InitDevice ID, *pID
の空白部分にTABを使用しているのですが、
そのままコピーして貼り付け、書き込みをしたら何故かくっついてしまいました。
なのでここでは関係ないですが、pID= &ID;もそれぞれ離れています。
折角のご指摘、申し訳ございません。
if(!(*pID->InitD(hWnd))) return 0;
>>423
早急に結論付けるつもりは無いけど、
WinDef.hで定義されてる型は全てアウトかなぁ。
426402:02/12/05 22:18
>424さん
C:\data\c\win\2002120501\main.cpp(192) : error C2100: 間接指定演算子 (*) の使い方が不正です。
と出てしまいました。
片方だけSTRICT / NO_STRCITTがDefineされてるとかないよね?
WINAPI WinMainにする。
429402:02/12/05 22:29
>425さん
そ、そんな。
期待し過ぎかもしれませんが、Cにそんなところでこけて欲しくないです。

>427さん
はい、そう言った物は共通のヘッダに書きこんで、それぞれ読ませていますので。
430402:02/12/05 22:32
>428さん
やってみました。
が、結果は同じでした。
PASCAL WinMainにする。
プリプロセッサを全部展開して、HWNDがどうなっているのかたしかめてみたら?
433402:02/12/05 22:39
>431さん
元に戻しました。
が、結果は変わりませんでした。

どんどん弄りだすとHWNDがあちこちで必要になると思うのですが、
class内に飛び込ませるようなことは普通はないのでしょうか?
自分の作り方が例外的なのかなぁ…。
hWndはどこで定義されてるんだ?
windef.h
436402:02/12/05 22:49
>432さん
今のところ「これだー!」ってのが見つかりません…。

>434さん
hWndは、CreateWindowの返値です。
組んでいる途中で確認したのですが、正常に返しています。
>>436
HWND hWnd; はグローバル変数にしてる?
438402:02/12/05 22:53
>435さん
それをincludeしろって事ですよね?
main.h、ClsInitDevice.h共に試してみましたが、結果は同じでした。
試すたびにリビルドしているので、実はobjが更新されていなかったなんてオチは無いと思います。
HWNDをintにして、使用前後にcastしてみる、つーのは通るのかい?
>>402
ここまできたらソース全部どっかにうpした方が
速いと思われ
441402:02/12/05 23:04
>437さん
以前はグローバルでしたが、現状ではローカルです。
引数で持ち歩いています
442402:02/12/05 23:06
>439さん!!!
通りました!!
正常動作しています!!
何故!!?

>440さん
その手間が省けそうです。
>>441
それってちゃんと変数の範囲以内にあるの?
444439:02/12/05 23:08
えと、じゃあ、HWNDをHWND__にして、
どういうエラーがでるか報告してください。
445402:02/12/05 23:12
>443さん
あります。
持ち歩くのは面倒くさいですが、その辺の抜かりはありません。

>439さん
HWND_ hWndってことですか?

2002120501\main.cpp(187) : error C2065: 'HWND_' : 定義されていない識別子です。
2002120501\main.cpp(187) : error C2146: 構文エラー : ';' が、識別子 'hWnd' の前に必要です。
2002120501\main.cpp(187) : error C2065: 'hWnd' : 定義されていない識別子です。
2002120501\main.cpp(191) : error C2440: '=' : 'struct HWND__ *' から 'int' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
cl.exe の実行エラー

このようにでました。
_ではなく、__( under*2 )です
447402:02/12/05 23:19
>446さん
すみません。
以下のようになりました。

2002120501\main.cpp(191) : error C2679: 二項演算子 '=' : 型 'struct HWND__ *' の右オペランドを扱う演算子は定義されていません。(または変換できません)(新しい動作; ヘルプを参照)
2002120501\main.cpp(192) : error C2440: 'type cast' : 'struct HWND__' から 'int' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。

191行目がCreateWindowsからの返値を受け取るところ。
192行目がInitDを読み出すところです。
448439じゃないけど:02/12/05 23:25
あかん呆けてた。

409のソースに対して、
全ての "HWND" を "HWND__ *"で置換してみてください
449439:02/12/05 23:26
あれ?名前が変だ、、、
>>402
あのさー、関係あるのかないのかわかんないけど、
windef.hで
DECLARE_HANDLE  (HWND);
って宣言されてるマクロ「DECLARE_HANDLE」ってWinnt.hで宣言されてるじゃん。
Win9xだとどうなってる?
Abstract:

This module defines the 32-Bit Windows types and constants that are
defined by NT, but exposed through the Win32 API.
452402:02/12/05 23:40
>439さん
あれ?
また同じエラーが…。
焦ってんのかな…。

>450さん
WINNT.H(208): #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
WINNT.H(211): #define DECLARE_HANDLE(name) typedef HANDLE name
と検索したら出てきました。
453402:02/12/05 23:47
>439さん、及び皆さん
色々ご教授下さいましてありがとうございました。
お蔭様でclassを使用しつつ、目指すべき動作が出来そうです。
何故動いたのか、どうして動かなかったのかはまた個人的に検証してみたいと思います。

454名無し@沢村:02/12/08 03:08
皆々様方〜、教えてくださらんか〜♪
それはmidiファイルの読み込みだが、自分で保存したmidiファイルは難なく読み込めるわけよ。
だが、他のmidiシーケンサーで作ったmidiファイルは、ちゃんと読み込めるものと、読み込んで鳴らすとチンドン屋みたいな音になってしまうものとが出てくるわけよ。
ま、ほとんどのmidiファイルはチンドン屋みたいになってしまって、ちゃんと読み込めるものはほんの少しだわな…。
皆々様方〜、私はこの原因を分析した結果原因らしきものを突き止めたわけよ。
それはノートノンやオフのステータスバイトってあるだろ?90や80よ。
それを省略して本来90407F7Fみたいにするところを407F7Fと省略するだろ?
で続けて書くと90407F7F407F7Fになるわな…。
それでデルタタイムというのもあるだろ?
デルタタイムは1バイトから4バイトまでの可変長になっていて、1バイトだったら、例えば90407F7Fになるが、もし4バイト
だったら、例えば90407F7F407F7Fになるだろ?
そうすると90407F7Fに続く407F7Fがステータスバイトが省略されてのノートオンのメッセージなのか、デルタタイムなのか区別がつかんわけよ。
どちらも7F以下で同じだしな…。
皆々様方〜、90407F7Fに続く407F7Fがステータスバイトが省略されてのノートオンのメッセージなのか、デルタタイムなのか区別する方法を教えてくださらんか〜皆々様方〜♪
ぜひお願いします♪
私はいま最後の壁にぶち当たっているのですよ!!!
>>454
死ねよ糞マルチポスト野郎
つーか、「沢村」 は定型の荒らしコピペだから、みんな以降無視してくれよ。
457帳票:02/12/10 14:20
Winで帳票印刷プログラムを作っています。
しかし、印刷する情報量によっては一つの帳票が2ページ以上のサイズに
なることもあります。
連続帳票に印刷するような単純な形態であれば、単にキリのいいところで
改頁かますだけなので別に悩むこともないのですが、集計表や円グラフ等を
同時に印刷(つまり、グラフィカルで見栄えがいいものを)するので、
見栄えが良いように改頁する工夫が必要です。

また、印刷する帳票の種類が多くあり、帳票毎に改頁位置を調整する手間
をかけるのは時間が無駄・もったいない気がします。

そこで皆さんに質問ですが、汎用的な帳票印刷処理を作るのになにか良い
プログラミングテクニックは無いでしょうか?
実コードを示さずとも考え方で結構です。よろしくお願いします。

ちなみに、自身で調べてみましたがどうやら難しい部類のようで、
解説サイトは見つけられず、開発ツール等はいくつか見つかりました。

ツール(ライブラリ)類に頼る方が早いでしょうが、スキルアップのために
も理解したいと思います。
TeXに倣うのも手。
たしか、綺麗さを評価関数にして、動的計画法で
ページの切れ目とか、文字幅とかを調整してた
そもそも帳票のレイアウトを、Word みたいにページを意識したものにするとか。
460デフォルトの名無しさん:02/12/10 20:06
おいらも純粋にC/C++を勉強したくて、VC++でMFCを利用せずに勉強しています。
そこで。。。
あるプログラムを組んだんですよ、計算させるプログラムを。
そこで計算時間が気になってきて、測定したくなったんです。
ところがclockとか何とか関数はあるんですが使い方が全然わかりまへん。
おせーてくださいまし。
>>460
計算開始前に clock() の返す値を保存しといて、
それを計算終了後に clock() の返す値から引いて
CLOCKS_PER_SEC で割れば秒単位で時間が出る。
Windows なら GetTickCount() 使いなさいよ。
timeGetTime() ならより正確に。
463デフォルトの名無しさん:02/12/11 04:29
よくプログラミングエディタで文字の強調表示ってやってるけど、どうやればいいの?
RichEditに少し手を出してるけど、部分編集のやり方が分からない。
>>463
フォントをBOLDに変更するか、
数ドットずらして二重に描画すればいい。
あ、RichEditは知らない。
>>463
API なら CreateFont() の引数 fnWeight に FW_BOLD とか指定するけど
RichEditは使ったことないからしらん
CreateFontIndirect() でもいいけどな、て書いて思ったけど
文字の強調表示って選択での反転表示じゃないよな、モウネルケド
466465:02/12/11 04:48
あ、ケコーン
モーネル
Wordpadのソースみれ。
RichEditならLockWindowUpdateで描画ロックして
範囲選択→フォント変更(boldとか)→範囲選択解除
LockWindowUpdateしないと選択範囲が見えちゃうYO-
469デフォルトの名無しさん:02/12/11 09:48
DLLからDLLを呼び出すコードを書いているのですが、
呼び出される側のDLL、単独で呼び出すと問題なく
呼び出せるのですが、呼び出す側のDLLから呼ぼうとすると
エントリーポイントが見つからないといってきます。

dependency walkerでのぞいてみると、呼びだされる側の
DLLをみた範囲では普通にエントリポイントが見えるのですが
呼び出した側のほうを開くと、呼び出しDLLは、大丈夫ですが
依存関係にある呼び出される側のDLLのエントリポイントが
見えなくなっています。

リンクは、libファイルを使った静的リンク。

いろいろと調べてみましたがよくわからないのでなにか
とっかかりになりそうなことがありましたらコメントいただきたいと
思います。
470帳票:02/12/11 09:57
レスありがとうございます。

>>458
TeX、初めて調べて知りましたが、難しいですね。
まあ、概念は何となく分かりました。
>たしか、綺麗さを評価関数にして、動的計画法で
>ページの切れ目とか、文字幅とかを調整してた
なんとか実践出来るように考えてみます。

>>459
>そもそも帳票のレイアウトを、Word みたいにページを意識したものにするとか。
一応、そのつもりでいます。問題は、キレイに印刷出来るようかつ、
帳票の種類に依存しない汎用的なロジックを如何に組むかということですね。
extern "C"
472463:02/12/11 13:14
>468
選択範囲の取得って、どうやればいいんですか?
>467
ワードパッドのソースって、何処にあるんですか?

>>472
googleで検索もせずに何を言うか
>>469
471 のと、あと WINAPI
>>469
LoadLibrary() + GetProcAddress() + GetLastError() + FormatMessage() も試してみれ。
ちょっとスレ違いかもしれないけども。

ソフトシンセを作ろうと思ってるんですけども、肝心のシンセ部分は出切るんですが、
MIDIドライバにして、Windows自体から汎用的に(言い方がおかしい)使えるようにしたいんです。
つまり、RolandのVSCやYAMAHAのS-YXGやWinGrooveみたいな感じですね。

で、DDKを使おうと思ってるんですが、まず98DDKしかありません。最新版は落とせないし。
MSDN見てサンプルに「FMSYNTH」やら「DDKSYNTH」やらあるんですが、
言われたフォルダにはそれがないです。多分98DDKだからでしょうが。
MIDIドライバのサンプルなんか無いでしょうか?
Googleでの検索では見つかりませんでした。
んー、そういう話は回答つかないかもネー。
478名無し@沢村:02/12/15 21:30
皆々様方〜、教えてくださらんか〜!!
それは画面のちらつきについてだが、私は最初WM_PAINTメッセージの中でペイントしてInvalidateRectで再描画するという方式だったのよ。
でもこれだとどうしても画面がちらついてしまうので、WEBで検索してダブルバッファ方式を採用したのよ。
この検索したページのダブルバッファ方式というのは裏画面にCreateCompatibleBitmapでビットマップをつくっておいて、
描画はすべて裏画面におこない再描画するときは裏画面のビットマップを表画面に転送するというものなのよ。
これでとりあえずは全然ちらつかなくなったのよ。
でもこれだと多分モニターかグラフィックボードの性能が悪いためだと思うけど、10秒くらい放っとくと突然画面にちゃんと色が出なくなってしまうのよ。
でも他のソフトなんかモニターやグラフィックボードの性能は悪くても画面はちらつかないし、何時間やっても画面の色が出なくなることはないので、もっとうまいちらつき防止策をやっているはずなのよ。
まあ、WM_PAINTメッセージの中でペイントしてInvalidateRectで再描画しても10秒とまではいかないが、5分ほどで画面の色が出なくなってはいたわな…。
おそらくBITBLTを多用したためだという節が臭いわな…。
皆々様方〜、性能がボロっちいモニターやグラフィックカードでも他のソフトみたいに画面の色が出なくなったりしないいい方法を教えてくださらんか〜、皆々様方〜、お願いします〜♪
>>478
まあ、多分お前のプログラムのバグだろう。
冷静になって、きちんとデバッグすれば良いと思う。
>>479
マルチにマジレスごくろうさん
>>480
ハイハイ、発言できてよかったね。
482名無し@沢村:02/12/15 23:17
皆々様方〜、再描画における突然色が出なくなる問題だが、原因を突き止めたぞ、皆々様方〜♪
皆々様方〜、その原因というのはブラシとペンを多用しすぎていたためじゃ〜!
試しにブラシとペンをうんと減らしてみたら突然色が出なくなることはなくなった…。
ただ、あまり減らしすぎたんで、今度は画面のみてくれがしょぼくなってしまった…。
なんとかしょぼさを最低限に食い止めるためには、どうしてもあとひとつペンヲ増やす必要があるのだが、増やして大丈夫だろうか?
また突然色が出なくなったりしないだろうか?
皆々様方〜、ブラシとペンはいつくまでつくっても画面がおかしくならないか、教えてくだされ〜、皆々様方〜♪
>>482
取りあえず、何個使ったらおかしくなって、何個まで減らせば良くなったのかを書いてくれ。
>>482
マルチポストやめろ
>>482
マジでウザい
486名無し@沢村:02/12/16 00:12
皆々様方〜、ダメだ。ブラシ2、ペン3ではあまりみてくれがしょぼかったんで、
ブラシ2、ペン4に増やしてみたところ、長持ちはするが、やはり5分くらい再描画を繰り返すと、
突然画面に色が出なくなってしまうのよ。
どうもブラシ2、ペン3というのが、画面の色が出なくならないリミットらしいが、これだとあまりにしょぼすぎて完成作品がイヤになるわけよ。
どうしてもブラシ2、ペン4に増やしたいんだがなあ…。何かいい方法ない?
ところでリソースメータって何?フリーでありますか?それはどこからダウンロードできるのですか?
>>486
インクカートリッジ交換してみろ
488デフォルトの名無しさん:02/12/16 00:28
>>486
ちらつきの問題なのかい?
489名無し@沢村:02/12/16 00:48
皆々様方〜、原因はペンとブラシの数にもあるが、それ以上にBITBLTを多用することにあるんじゃないかなという気がしてきたよ。
というのもリソースメータがアクセサリーの中に入っていたのを偶然発見しさっそく起動させて監視してみたところ、システムリソースとGDIリソースというのが見る見る少なくなっていくのがわかったからよ。
というのも私はファイルのデータの数だけforループさせてその分だけBITBLTで描画しているため何千回、何万回とBITBLTを使って広大な領域に描画していることになるわけよ。
何か常識で考えても何千回、何万回とBITBLTを使ったら画面がおかしくなりそうな気がしてきたわけだが、何千回、何万回もBITBLTを使って広大な領域に描画したら画面がおかしくなりますか?
教えてくだされ〜、皆々様方〜♪
490デフォルトの名無しさん:02/12/16 00:54
>>489
何だ?広大な領域って?
>>486,489
http://pc3.2ch.net/test/read.cgi/tech/1036654893/l50
こっちに統一してくれ
Releaseしてないだろ。
>492 漏れもそう思う
DCオブジェクト経由ではなくメモリーDCに直接描いた後転送した方が
リソースの問題もなければ速度も速い
間違いなく492
496デフォルトの名無しさん:02/12/16 15:54
上記リンク先にReleaseはやってるような事が書いてある・・・
Releaseしてるつもりなだけだろ。
おい沢村!
現象が再現する最短コードアップしろ!
お兄さん達が可愛がってやるぜ。
ReleaseしてもDCの関連づけを外してなければ解放されないのは分かっているのだろうか?
何も分かっていない方に30,000ペリカ
500名無し@沢村:02/12/16 20:06
>>497
まずWinmain関数のメッセージループの前のところに、次ぎの関数を入れてる。
void Init_Draw()
{
HDC hDC;
hDC=GetDC(hWnd);
hMemDC=CreateCompatibleDC(hDC);
hBIT=CreateCompatibleBitmap(hDC,800,600);
SelectObject(hMemDC,hBIT);
PatBlt(hMemDC,0,0,800,600,PATCOPY);
ReleaseDC(hWnd,hDC);
}
501名無し@沢村:02/12/16 20:09
そしてウインドウプロシージャのWM_PAINTメッセージの中に次ぎの関数を入れてる。
void Init_Draw2(HWND hwnd)
{
CreateRect();//Rectの作成

hDC2=BeginPaint(hwnd,&paintstruct);
//ペンとブラシを作成
CreatePen_Brush();
FillRect(hMemDC,&zen_rect,hBrush2);
//テキストの色を指定
SetTextColor(hMemDC,RGB(20,20,20));
//テキストの背景色を指定
SetBkColor(hMemDC,RGB(190,190,190)) ;
SelectObject(hMemDC,hFont);
for(onkaipos=0;onkaipos<28;onkaipos++)
{
TextOut(hMemDC,onkaipos*21+20,515, onkais[onkaipos].name,strlen(onkais[onkaipos].name));
}
ct_Textout(hMemDC);
//リージョン外にビットマップを描画
hMemDC2=CreateCompatibleDC(hMemDC);
SelectObject(hMemDC2,hBMP);


(中略)

//ペンとブラシを削除
DeletePen_Brush();
DeleteDC(hMemDC2);
EndPaint(hwnd,&paintstruct);
}
502名無し@沢村:02/12/16 20:12
そして最後にウインドウプロシージャのWM_DESTROYメッセージの中で裏画面のhMemDCを初めいろいろ削除してる。

DeleteDC(hMemDC);

DeleteObject(hBMP);
DeleteObject(hBMP2);
DeleteObject(hBIT);
503名無し@沢村:02/12/16 20:13
…とまあこんな感じだが、これだけじゃ開放されないの?
「ReleaseしてもDCの関連づけを外してなければ解放されない」というのは何?
それは初耳です。それはどうするのですか?
マルチすんなボケ
どっちかに統一しろ
こいつの相手してる限りいつまでもマルチを繰り返す。
どっかで相手してもらえると思ってるからマルチしてる。
>>503
プログラマー向きの性格じゃないから
ソース全部削除して自分探しの旅にでも出てこい
>>503
マルチポストうざい
首吊って氏ね とまでは言わないからもう来んな
やっぱり関連付け戻してないし
開放されるわけが無い
30,000ペリカくれ
SelectObject関数は、 指定されたデバイス コンテキスト (DC) 内にオブジェクトを選択します。
新しいオブジェクトは、 同じ種類の以前のオブジェクトと置き換わります。

アプリケーションは、 新しいオブジェクトを使って描画を終了したら、 必ずそのオブジェクトを
元のデフォルトのオブジェクトに置き換えなければなりません。

坊や、分かるかい?
400デュカーティくれ
他のスレでも質問に答えてもらってる癖に
それを直そうともしない。
何のために質問しているのか。
>>503-508
頼むから沢村を相手にしないでくれ。
514名無し@沢村:02/12/23 07:36
時に、(Not MFC)のヌヒ等よ、ActiveXをつくるときはどうしてる?
俺は普段は(Not MFC)だが、ActiveXをつくるときだけは(MFC)してるよ。
VC++の場合、(Not MFC)でActiveXをつくろうと思ったら、内部構造を完全に把握していなければならず、死ぬほど難しいぞ!!
( ´,_ゝ`)プッ
( ´,_ゝ`)プッ
放置
518名無し@沢村:02/12/23 13:06
あと、ActiveXをつくるにはMFCじゃなくてATLがいいって聞いたんだけど、
俺って本当に馬鹿だからATLをさっぱり理解できないんだよね。
519名無し@沢村:02/12/23 13:34
>>518
俺の名を語るな!!
520名無し@沢村:02/12/23 13:47
( ´,_ゝ`)プッ
521名無し@沢村:02/12/23 14:18
俺のことは放置してくだされ〜、皆々様方〜♪
522名無し@沢村:02/12/23 20:46
ライトウェーブや3DStudioMaxのフォーマットなんてダサくて使えないよ。
せめてバーチャファイターのチェンリーなみのがサクサク動かないと…!
PCの3Dはダサいから今のところ手を出していない…。
523デフォルトの名無しさん:02/12/23 20:50
FormatMessageについておしえてください。 
普通はNetMsg.dllを読み込んで処理すると思うのですが、
独自のメッセージを追加したときにでうまく処理できると聞いたのですが
具体的にどうすればいいのでしょうか?
>>523
メッセージリソースだか文字列リソースだかを追加する
ブルドッグソース
>>523

普通は、FORMAT_MESSAGE_FROM_SYSTEMでメッセージ入力元にはNULLを指定。
文字列リソース使うかメッセージファイルからDLLつくって、
source = LoadLibraryEx((LPCTSTR)source, NULL, LOAD_LIBRARY_AS_DATAFILE);
とでもやって、
FORMAT_MESSAGE_FROM_HMODULE
を使う。
527デフォルトの名無しさん:02/12/27 11:12
>>474

> 471 のと、あと WINAPI

なぜにWINAPI?
>>453

> 色々ご教授下さいましてありがとうございました。
> お蔭様でclassを使用しつつ、目指すべき動作が出来そうです。
> 何故動いたのか、どうして動かなかったのかはまた個人的に検証してみたいと思います。

きわめて亀レスだが、
間違いなくSTRICTのdefineされる/されないによる違いだぞ。
昔はSTRICT未定義がデフォだったんだが、最近はNO_STRICTしないとSTRICTがデフォに
なってるからな。

dumpbin /symbols hoge.obj
とかしてみろ、呼び出し元/先で食い違ってるはずだ。
STRICT って何ですか?
530名無し@沢村:02/12/28 06:38
ヌヒ等よ、ときにアセンブル言語は知っているか?
VCでプログラムを組むにしてもアセンブル言語を知らないとまずいぞ。
というのはVC付属のデバッガを起動するとアセンブル言語一覧の問題の個所にやじるしが出てくるからだ。
これが何を意味するかわからないとバグを直せないだろ?
だからVC使いにとってもアセンブル言語は必須というわけよ。
531名無し@沢村:02/12/28 12:19
皆々様方教えてくだされ〜、いまwindows用の逆Cコンパイラをつくっているのですよ。
で、ベタでひとつのCソースファイルに展開するとこまでは成功したのですが、これだと読みにくすぎるので、せめてインクルードしているwindows.hなどは#include"windows.h"で済ませるようにしたいのですが、どうしたらいい?
また.hファイルと.cppファイルを切り分けて、それぞれ別のファイルとして展開するにはどうしたらいいですか?
> アセンブル言語




沢村を叩くのは OK だが相手するのは禁止。
VCでマネージ拡張を使っているとデバッグ時に表示されるのはCLI
Intel系のアセンブラの知識がまるで役に立たんよ
タブコントロールの
タブ部分のテキストのフォントが知りたいんですが、
なんか方法ありますでしょうか?

あるいは、そもそも変更できないので
取得せずに決めうちでいいって言うことならそれでもいいんですが
>>534
GETFONTでとれないですか?
WM_SETFONT、WM_GETFONTは試してみた?
537デフォルトの名無しさん:03/01/08 17:01
教えて下さい。
fxt(ttp://www.jjj.de/fxt/)というGNUライセンスのライブラリをダウソしたのですが、
拡張子がccなんですが、なんなんでしょう。
C++でもないし。
538デフォルトの名無しさん:03/01/08 17:13
.Cとか.ccってのはC++だと思われ…つーかソースを見るともろC++・・・・
539C++厨:03/01/08 17:18
GNU系でよく見ましたね<.cc
.C .cc .cxx .cpp は C++
541537:03/01/08 17:24
なるほどC++ですか。どうも有難うございました。
でも、クラスメソッドでなく、関数ばかりですね。
不思議だ。昔のC++はそういうものだったのかなぁ。
542IP記録実験:03/01/08 21:27
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
543デフォルトの名無しさん:03/01/08 23:35
char* func(void);

というふうにする方がいいと思うのだが
>>543
誤爆ですか?
いいえ
いいえ誤爆です
ほぅ。
なんと
一定期間でログは消しますです。
>>247
それはED
>>310
>>1はほんもの?
553IP記録実験:03/01/09 01:50
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
にせゆき逝っちゃった。
福島もキタ━━━━━━(゚∀゚)━━━━━━ !!!!
正直、重くならなけりゃ強制ふしあなされてもいいし
俺は 自宅---イスラエル---インド---中国---北欧---カナダ---エジプト---自宅---2ちゃん

と20もの多弾プロ串を経由しているので追跡は不可能です。




======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
挙手による多数決は最大の愚行!!
匿名性が失われ自分に反対する者が誰かは
わかるのに小数派には反論さえ許されない
最悪のシステム!!

もしも常に特定の人物と
意見が対立し 常に片方だけが意思を
抹殺されたら…

それが続けば必ず集団は決裂する!!
【ネットボランティア】余ったCPUを・・・
 cell computingとは、ブロードバンドに接続された家庭内や
企業内のPCの余剰CPUパワーを統合し、
仮想的なスーパーコンピュータとしての利用を実現する
技術を用いたSI、ネットワークサービスです。
 バイオ、物理計算、設計、金融工学、CGレンダリングなどの
分野のお客様へ、安価に仮想スーパーコンピュータパワーを
提供することを目的としております。
 なお、将来的には収益にあわせてCPUパワーを提供してくださる
参加者へポイントシステムやデジタルコンテンツによる
利益還元を考えております。
http://www2.cellcomputing.jp/

2ちゃんねるのチーム作ってみました。
http://members.cellcomputing.jp/services/teams/team.htm?id=ABBE425B-CE11-4DA4-8591-C68DF67DA41A
>通知書,本件訴状,請求の趣旨訂正申立書等により,
>本件1ないし3のスレッドにおいて原告らの名誉を毀損する
>本件各名誉毀損発言が書き込まれたことを知っていたのであり,
>これにより原告らの名誉権が侵害されていることを認識し,
>又は,認識し得たのであるから

この最初の通知書っていうのが内容証明かと思ったんですが、、、
スレ違いだが、イニシャルって姓と名どっちが前になるの?
俺は両方とも同じだからわかんない
ひろゆきまだー?
2ちゃんねるがアクセスログ記録を始めましたが、あなたの考えは? - Yahoo!投票(左下から投票できます)。
http://dailynews.yahoo.co.jp/fc/computer/2channel/

どきっちさんです
マッドアングラーってなんだったっけ?
ベルバラの登場人物
JOJOかもしれない
記念すべき瞬間ですね。私は将来的には2chにとってプラスになると思ってます。
「こういうカキコをすると逮捕されちゃいますよん」って注意書きを
トップに貼ってたらイイと思う。
ハイテク捜査課に通報しますた。
そんなまわりくどい傍証より見ればいいわけなんだけどね(^_^;)
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
set NULLnul>l &>gt>gthosting-x.comnull>>gtgtgt get oldres-num get few make IP >renew.
つまり敬語ばかり使うようにしたらいいわけですね?どんな悪人に対しても。(w
タイトル変な文章だな
確かに小一時間はオカシカッタ
IPアドレス記録は今後継続していきましょう。
もっと踏み込んだ手段をとればなおいいが。
580名無し@沢村:03/01/11 20:45
めめじおーーーん!!
おいヌヒ等よ、大変だぞ!!
俺はふと思って2ちゃんねるのあっちこちの板を見て回ったのよ。
格闘技板とかアナウンサー板とかプログラマー板とかをな。
そうしたらな、どこのスレ開いても最近ひろゆきの話題が出てる板はプログラム技術板だけだったぞ!!
ヌヒ等よ、ここは2ちゃんねるいっちゃん恥ずかしい板だぞ!!
581デフォルトの名無しさん:03/01/11 23:21
外部プロセスのコモンコントロール(コンボボックスとか)にくるメッセージを
閲覧したり、ウインドプロシージャをフックしたりということは可能なのでしょうか?

どこまでの発言がやばいのか教えて欲しいな
当て字を使えばOK?セクハラだったら施苦腹とか
今度はプロ野球板もダメ
普通ってのがわからないんだよ!
585デフォルトの名無しさん:03/01/11 23:43
>>581
"システムフック" or "グローバルフック"で検索
586デフォルトの名無しさん:03/01/12 00:05
>>585
どうもありがとうございます。

またまた質問で申し訳ないです。
MSDNオンラインでGetComboBoxInfo()なるAPIを見つけたんですが
Winuser.hをincludeしろと書いてあるのにそうしてもシンボルを認識してくれません
インテリセンスはちゃんと見つけてくれるのに。。
#ifディレクティブとかで定義部をはじかれてるのでしょうか?

どなたかご存知ですか?
単に、WINVERとかWIN32_IEとか、そのあたりの
定義の問題じゃないか。
>>586
#endif /* NOWINABLE */
#endif /* WINVER >= 0x0500 */
弾いてそうなのはこの2つ
589デフォルトの名無しさん:03/01/12 00:52
>>587-588
ありがとうございました
単にWINVERが0x0500未満だったようです
m(_ _)m

大好きだったけど〜、IP取るなんて〜♪

 
 ペン字講座
592デフォルトの名無しさん:03/01/12 02:58
http://www.microsoft.com/japan/developer/library/vccore/_crt_path_field_limits.htm
ここを見ると、
_MAX_PATH は 絶対パスの最大長
と書いてあるのですが、
単位はバイトで良いのでしょうか?
>>592
パス名をintに入れたりするか?
char FileName[_MAX_PATH];
>>593
unsigned shortに入れることはあったりするだろう。
>>594
それをどう使う?
>>595
UNICODE 系の API に渡すんだろ。
>>596  天才! 理解できた。
自作自演でした
 |  |ノハヽ
 |  |。‘从 <新スレおめでとうございまーす♪
 |_と )
 |桃| ノ
 | ̄|  
1乙
4nd
 4nd
フォンドボー?
>>592-597
ちょっと興味があるから聞くんだけど、
UNICODEで_MAX_PATHにおさまるパス名をMBCSに変換したら
_MAX_PATHを越えたっていう場合、やっぱりそれを...A系関数に
渡しちゃいけないんだよね?
_MAX_PATHは文字数だ。
CHAR a[_MAX_PATH];

WCHAR b[_MAX_PATH];
も文字数が_MAX_PATH。それだけ。
>>603
それ以前に _MAX_PATH の値は、あまり信用しない方が。確か 256 程度に
定義されてたと思うけど、NTFS とかネットワークパス (//server/share_name/xxx)
使うと、あっさり越えられるでしょ。
605名無し@沢村:03/01/12 17:04
ヌヒ等よ、今日はヌヒ等にちょっとしたソースをプレゼントしよう。
それはたくさんあるラジオボタンから値を取得したときチェックを切り替えるときのソースだ。
ただしラジオボタンのハンドルは配列にしておかなくちゃいかん。また取得する値は配列のインデックスと同じにしなくちゃいかんがな…。便利だぞ、ヌヒ等よ♪

void CheckRadio(int max,int atai)//ラジオボタンのチェックを切り替える
{
int i;
for(i=0;i<max;i++)
{
if(i==atai)SendMessage(hRadio[i],BM_SETCHECK,1,0);
else SendMessage(hRadio[i],BM_SETCHECK,0,0);
}
}
606名無し@沢村:03/01/12 17:46
>>605
ヌヒよ、そのコードはコンパイルエラーが発生するぞ。
607デフォルトの名無しさん:03/01/12 19:01
正直今回、WindowsでC++を使って
プログラムしてみた。

Borland C++Compilerでただで
プログラム可能なので、正直
気軽に使えた。便利。

でも肝心の使い方がイマイチ「?」
なので、小林健一郎という人の書いた
C++の本を買うことにした。

初心者向けなので、「こんなに簡単で
いいの?」ってくらいスムーズに
プログラムが書けるようになった。

しかしまだまだ難しい作業だとか、覚える
必要のある作業はたくさんある。

最終目標はGUIアプリを作ることだ。
そこで人に相談したところ、GUIアプリを
作るなら、Visual C++で作った方がぜったい
楽だと聞いた。

そうなのか。。。
ところで、プログラマになろうと思ったら、
「絶対」Visual C++なしでC++が書けなきゃ
だめなの??


GUIアプリなんてBorland C++Compilerに
ちょっとした雛型をコピぺすりゃ簡単に出来る。
609607:03/01/12 19:45
>608
そうなんですか。。。
初心者なので今いちわからない
こととか多かった。調べようにも
語句とかが「?」って感じで。。
ありがとうございました。
>>609
まあ、猫でもわかる・・とか見てみることだな
611デフォルトの名無しさん:03/01/12 20:12
モードレス ダイアログをCreateDialog で制作すると最初に
何故かIDOKが2回送られて困っています。原因は何処ら辺でしょうか?
そうか・・・。
>619
釣りのつもりだろうけど・・

>ボランティアだから無責任でイイ?
ボランティア=無責任に見えるんだな、<619さんは。

回答を求めてもループになるという罠
やっとhtml化だ、過去ログが読める
がんばってください
>>607
VC++よりかはBorland C++ Builderの方が簡単だと思います。
616デフォルトの名無しさん:03/01/13 02:02
3次元空間の各座標点にある特定の値(色とか密度とか)を持たせたくて,
3次元配列を使っています.
unsigned char A[100][100][100]; くらいまでは問題ないのですが,
配列の数がそれを越えると,メモリ不足からか,宣言をしただけでエラーが出て,
プログラムが異常終了してしまいます。
OSは,Windows98,コンパイラは,Borland C++Compiler,
積んでいるメモリは256MBです。
皆さんは,幾つくらいまで配列を使えますか?
617デフォルトの名無しさん:03/01/13 02:07
その配列を初期化するのに計算でやってるなら配列確保する意味なくねぇ?
手入力だったらそのエネルギーをほかの事に使うべし
>>616
自動変数にしてないか?

619山崎渉:03/01/13 18:25
(^^)
民事訴訟法改正になって憲法問題とかよっぽど重要な争点がないかぎり
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。

二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm

ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。
621名無し@沢村:03/01/13 22:52
>>616
ヌヒよ、宣言をしただけでエラーが出るのはあたりまえだよ、ヌヒよ。
宣言をするということはメモリをあらかじめ確保するということだからね。
またヌヒよ、プログラムで扱うメモリはセグメントという単位にわけられるんだよ。
だからメモリが256MBあっても関係なくて、メモリを確保するときはそのセグメントをまたがないようにしなければいけないんだよ。
俺もくわしいことはわからないが、たいがいセグメントは16で割りきれる単位になっているはずだよ。
だからunsigned char A[100][100][100]; という宣言の仕方はいけない。
unsigned char A[128][128][128]; というようにすればセグメントをまたがないから、どんなに巨大なメモリを確保しても大丈夫のはずだよ。
ヌヒよ、頑張れ!!
> セグメント

(・∀・)カエレ!
>ヌヒよ

こいつはなぜ人を下僕呼ばわりするのですか?
> unsigned char A[128][128][128]; というようにすればセグメントをまたがないから

胡散臭い。
何故 unsigned char A[100][100][100]; がセグメントをまたぎ、
unsigned char A[128][128][128]; がまたがないのか説明してもらおうか。
626616:03/01/14 06:32
>>618
してました。
問題解決,ありがとうございました。
627山崎渉:03/01/15 17:48
(^^)
628デフォルトの名無しさん:03/01/16 16:49
Win32アプリの開発にセグメントちう概念無いだろヴァカ沢村
すげえ久しぶりにセグメントという言葉を聞きました。
630デフォルトの名無しさん:03/01/16 16:54
で、スタックについて何も言わないヤツらもイタイな。

で、>605もかなりイタイな。

で、誰も的確な突っ込みを入れないのは、放置が徹底されてるからか。

で、なるほど。
ヒュージメモリモデルですが何か?
沢村という名前に対してレスをする奴は沢村と同様例外なく放置。
2003年モデルですが何か?
634キック沢村:03/01/16 17:24
>>632
あんだとゴルァ!
635デフォルトの名無しさん:03/01/16 18:26
>>632
放置もいいが、沢村が懲りてくれないと害の方が多いのではないか?
>>630
スタックについては >>618 が言っているのも同然だろ
バカは絶対に懲りない。バカだから。
>>636
それは>616が理解しているかどうかによるだろ。
理解していなければ言っていないのと同然。
ま、どっちでも良いが。
どうでもいい話題だとスレッドが賑わうのな
try{
  沢村
}
catch(沢村){
  TRACE("逝ってよし");
}
>>639
つーかよ、沢村に限らず、電波ってるカキコは叩くべきだろうがよ。
おとなしい掲示板が好きなら他所いけや。
>641
典型的な釣られ厨だな(w
>642
クソスレも叩かず容認する訳だ・・・
言っとくが沢村はこれまでに他のスレでも十分叩かれ尽くしてるから
今更叩いてもウザイだけなんだが。
645639:03/01/17 13:48
>>642
漏れは正直な感想を書いただけで、釣ったつもりは全然無いのだが・・・
>>645
何でもすぐ釣りだと思い込む人ってけっこういます。
厨に「釣れた!」とか後出しジャンケンされるだけのことが
そんなにこわいんですかねえ。謎です。
でもバス釣りより DQN 釣りのが楽しいよな
クリスマスツリー
なんで釣る釣られるの話になんの?
叩くか放置するかの話だろ?
こんな状況こそ沢村の思うつぼ。
叩くヤツは叩かせとけ。放置したきゃ、放置しとけ。そんだけの話。
>645
マジレスすると「釣り厨」じゃなく「釣られ厨」なんだから

「電波ってるカキコは叩」いて回る奴は簡単に釣られるねって話だろ
というわけで、電波は解禁となりました(祝)
というわけで、ぬるぽは解禁となりました(祝)
653山崎渉:03/01/23 20:13
(^^)
654デフォルトの名無しさん:03/01/24 18:30
解決しました。ありがとうございました。
そんな便利な関数があったんですか・・・。恩にきります。
「恩にきります」って何すか?
657デフォルトの名無しさん:03/01/31 00:56
Windowsに設定されている、DNSサーバアドレスを取得したいのですが、
どうすればよいのでしょうか?
やはりWinsockを使用するのでしょうか?
>656
そんな使い方は日常「ちゃはんじ」
>>657
レジストリのどこかにあると思われ
そういや昨日、ニュー速にちゃはんじ神が降臨したなぁ
661 :03/02/04 19:51
ちゃはんじ程度で神か。おめでてーな
>>661
4日越しのレスありがとう
このスレもう用無しかな


つーわけで
Windows ProgrammingはMFC使いましょう
ずっと前から用なしだろう。Win32APIスレと全然変わんねーもん。
> Win32APIスレ

名前が悪い。
Windows でのプログラミングではなく、API そのものを扱っているように見える。
ちょっと前にスレタイが気に入らないってだけの理由でCスレが乱立したな・・・
しかも現在、2 つに分かれててどっちも機能してるしな。
Cスレの流れは異常な速さだからスレが増えても書き込む奴はいるだろうが
ここは明らかに機能してなさげ。
ぬるぽスレはどうよ?
なんとなくage
これうちだと

みたいに表示されるんだけどみんなの環境ではどうなのかな?
TextOutならまともにでるんだけどな。

case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc;
LOGFONT lf;
HFONT hfont;
hdc = BeginPaint(hwnd, &ps);
ZeroMemory(&lf, sizeof(lf));
lf.lfHeight = 20;
lf.lfWidth = 0;
lf.lfEscapement = 2700;
lf.lfOrientation = 2700;
lf.lfCharSet = DEFAULT_CHARSET;
strcpy(lf.lfFaceName, "MS ゴシック");
hfont = CreateFontIndirect(&lf);
SelectObject(hdc, hfont);
SetTextColor(hdc, RGB(0xFF, 0xFF, 0xFF));
SetBkColor(hdc, RGB(0,0,0));
TabbedTextOut(hdc, 100, 100, "くろいろ", 8, 0, NULL, 0);
EndPaint(hwnd, &ps);
DeleteObject(hfont);
}
break;
672デフォルトの名無しさん:03/02/10 13:16
続きはここでいいのか?
結局誰も次スレを立てなかったようだが
Win32API 質問箱 Build8
http://pc2.2ch.net/test/read.cgi/tech/1040964626/
673デフォルトの名無しさん:03/02/10 19:41
Webカメラで撮影した動画を、WindowsMessengerのように
リアルタイムで他のパソコンで表示したいのですが、
どうすれば実現できるか教えていただけないでしょうか。

いちおう実験で、DirectShowを利用して、Webカメラの
動画を送信元のパソコンに表示させたり、保存させる
ところまではいけたのですが・・・・そこから先がいろんな
ページをみてもわからなくて・・
よろしくお願いしまつ。
>>673
Winsock 使って転送すれ。プロトコルは自分で適当に作れ。
または送信元を HTTP サーバーにして、表示する方では Web ブラウザ使え。
>>672
> 1 には
> Windowsプログラムを作るにあたって、API以外の疑問や質問を
とあるので↓の方が近いかと。
http://pc2.2ch.net/test/read.cgi/tech/1044267746/
677671:03/02/11 19:16
>>671だれかやってみたひとひますか
>>677
興味ないからやらないよ
679デフォルトの名無しさん:03/02/17 11:27
Win2k/XP で CPU 使用率や使用メモリ等を取るのってどうやるんでしょうか?
なんか検索したらレジストリから取る方法を見つけたけど 2k/XP だと 100% としか
返ってこない。
タスクマネージャでも100%しか出なかったりしないか?
どうせidleを使うアプリでも入っているんだろうなと思いつつ

XP SP1以降は
GetSystemTimes
Win2k〜XPは(NT4でも未公開ながら使えるという噂)
NtQuerySystemInformation(SystemProcessorPerformanceInformation
Win9xは
WINTOP.VXD(もしあれば)
それ以外はレジストリ
HKEY_DYN_DATA - PerfStats\StartStat - KERNEL\CPUUsage
>>681
NtQuerySystemInformation でぐぐったら↓のページ見つけて解決しました。
隠し API とは…
http://kobatac.hp.infoseek.co.jp/tips/GetCpuUsageOnNT1_h.html

>>680
98 で動いてたレジストリ使う関数は、NT/2k/XP では Win 起動後
時間がたつにつれ 100% しか返さないように動くらしいです。
隠しAPIだったんだけど例の和解で公開された。
http://msdn.microsoft.com/library/en-us/sysinfo/base/ntquerysysteminformation.asp
Shift + 記号キー入力は、Ctrlと組み合わせると
WM_CHARで認識できず、WM_KEYDOWNでは、
キーボードレイアウトに依存してしまいます。

Ctrl + Shift + 記号キー入力を、キーボードレイアウトに
依存せずに簡単に識別する方法はないでしょうか?
>>683
そうなんですか。手元の VC6 や MSDN にはその Winternl.h ファイルすら
入ってないようですが今の C++.NET にはあるのかな。

どうもありがとうございます。
686デフォルトの名無しさん:03/02/18 23:22
CreateThreadでスレッド作った後、CloseHandleして
スレッドを動かしたまま、ExitProccessするのってありですか?
プロセスが無くなるからメモリリークとかしないですよね。
それとも、作ったスレッド内でかプロセスの終了シグナルとかフックする方法とかあるんですか?
>>685
最新のPSDK落として来い
>>684
捕まえた後、MapVirtualKeyExで返還するというのは?
>>686
特に問題ない
プロセス終了時にOSが全てのリソースを解放してくれる
690デフォルトの名無しさん:03/02/20 22:45
>>689
嘘をついちゃいけないねぇ
Windows(NT系も含む)では、mallocで割り当てたメモリはプロセス終了後もリークしつづける。
HeapAllocで割り当てたメモリは、プロセス時に解放される。
691デフォルトの名無しさん:03/02/20 23:17
>>690
嘘をついちゃいけないね。少なくとも2000以降は確実に開放してくれるはず。
NTの初期は知らんが
692デフォルトの名無しさん:03/02/20 23:25
>>691
ソースは?
693デフォルトの名無しさん:03/02/20 23:33
>>692
InsideWindows2000を読め
>>690
実際にリークするコードを書いてみろ、絶対に無理だから
DOSの頃ならMCBのチェインをぶっ壊せば
意図的にリークさせられたがWindowsでは無理
695デフォルトの名無しさん:03/02/21 00:34
ようはプロセス終了時にいちいちメモリとかハンドルとか気にするなってこった.
>>686
ExitProcess()やTerminateProcess()を呼ぶと
使ってる環境のクリーンアップが出来なくなるから
Exit&Terminatは、どうしようもない場合以外
呼ぶなって、何処かで読んだ記憶が…
で、メモリリークは、それぞれの環境で正常に終了させれば
普通は発生しないとも、何処かで読んだ記憶が…
697デフォルトの名無しさん:03/02/21 01:35
>>696
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdllpro/html/_win32_exitprocess.asp
には、ExitProcessを使わないとプロセスにアタッチしている DLL へプロセスの終了を通知しないって書いてあるから
TerminateProcess、exit、_exitなどは使わないほうが良いのでは?

>>697
全てのスレッドが終了すればプロセスは正常に終了するのだから
明示的にExitProcess()は呼ぶなって書いてありました
呼んでは、いけない理由の分かりやすかった例では

C++でExitProcess()を呼ぶとスレッドで使用したコンストラクタに
対応したデストラクタが呼ばれずに終了するから

だったと思います
これが、実際に何処で影響するかは理解出来なかったのですが(特殊な同期とか?)
それを読んで以来、念の為ExitProcess()は使わないようにしてます
>>698
>これが、実際に何処で影響するかは理解出来なかったのですが(特殊な同期とか?)
アプリ側で書き込みをバッファリングしている場合フラッシュされない等々


700デフォルトの名無しさん:03/02/21 05:02
fox使ってる人いる?
>>697
exit, _exitは内部でExitProcessを呼ぶ。
むしろCランタイムのクリーンアップ(stdoutのフラッシュとか)
が行われない可能性があるからExitProcessを直接呼ぶべきではない。
TerminateProcessが最後の手段なのはそのとおり。
702仕様書無しさん:03/02/21 11:12
何だここは?
malloc() や exit() 等の C 標準関数が、Win32API を使う以外の方法で実装
されているなんて妄想を持っている香具師が居るのか?
>>690 ワラタ
はいはい、ごちゃごちゃいってないでexitの前には必ずfreeしましょうね。
マナーですよ?これは。
>>704
akita
はいはい、brkでプロセスサイズも元に戻しましょうね。
マナーですよ?これわ。
malloc&freeはfj逝ってくれ
708デフォルトの名無しさん:03/02/21 18:18
>>698
ということはWinMainのメインスレッドもExitスレッドで終わらせるべきなのか
知らんかった(.鬱
709708:03/02/21 18:19
ExitThreadね
>>708
PostQuitMessage()でメッセージループ終わらせてWinMainから抜けるのが正道。
711708:03/02/21 18:24
>>710
もちろんメッセージループ抜けてからの話だよ
少し前まで無料でDDKが無料でダウソできたと思うのですが、
今はもう無理ぽ?
もう無理ぽ.
でも注文すれば送料だけで送ってくれるよ
>>712
以前DL出来たDDKのページはもう消されてるな。
でも、ググったりすれば何とか手に入るぞ。

という訳でガン(・∀・)ガレ!!
715712:03/02/22 00:06
ありがd
ググっても見つからなかったので大人しくCD注文しまつ
716デフォルトの名無しさん:03/02/22 00:17
DDKというのはDDTやKDDとは違うものなのですか?
アセンブラスレでよく出てくるけどな<DDKの場所
DDDとは懐かしい
Doki Doki Dynamo?
>>708
ネタだよな・・・
>>720
ネタじゃないよ
ウインドウの枠の幅を1に
(線だけの枠に)指定して
ウインドウを作成することは
できますか?
723デフォルトの名無しさん:03/02/23 11:35
他のバックグラウンドにあるようなアプリに、ctrlやalt付きのキーボードイベントを送るには
どうすれば良いのでしょうか。例えばAlt+Mなどを送りたいのですが…。

単一のキーボードイベントは送れています。
Altだけkeybd_eventなどを使ってみたのですが、どうも上手く行かなくて…。
>722
WS_POPUP なら出来るような気もする。とりあえず試せ
725デフォルトの名無しさん:03/02/23 22:00
LIBC無しで試してみようと思って
#pragma comment(linker, "/nodefaultlib")定義して
WinMainCRTStartup書いて
コンパイラオプションから/GXと/GZはずして
newとdelete書いて
とりあえず、うまく行くようになったと思ったら
try-catchを使おうとするとリンクで
error LNK2001: 外部シンボル "___CxxFrameHandler" は未解決です
error LNK2001: 外部シンボル "__except_list" は未解決です
と、怒られます.
これって、例外ハンドラも自分で実装しろって事?
でも実装の仕方がサパーリです.
DQNな俺にはここまでが限界.
誰か、わかる人いる?
VCなら、ライブラリのソースがあるんとちがうけ?
>>725
MSDNにMSJのバックナンバーがあるからMatt Pietrekの記事を探せ
どうでもいいが奴が発見したWM_TIMERで他プロセスの
任意のアドレスでコールバックを起こせる技はとうとう
セキュリティ脆弱性に認定されてしまったな
MSDNmagazine日本語版もwebで記事を読めるようにすればいいのになぁ
Matt Pietrekマンセー
730722:03/02/24 23:36
>724
> WS_POPUP なら出来るような気もする。とりあえず試せ
どうもタイトルばーがないウインドウならできるようでした…

が、タイトルバーがあるウインドウ(普通のウインドウ)では
できないようでした…

そういうものなのかな
SS_NOTIFYスタイルのSTATICコントロールを使ってSTN_CLICKEDを捕まえているのですが、
他のコントロールの**N_CLICKEDと違って、マウスのボタンを押下したタイミングでメッセージが送られてくるようです。
できればBUTTONコントロールと同じようにマウスのボタンを放したタイミングでメッセージを送って欲しいのですが、
そのように都合の良いメッセージ等はあるのでしょうか。よろしくお願いします。
I.E.でHTMLを表示してURLをクリックした時の動作を真似たいだけなんですが……
>>731
サブクラス化してWM_LBUTTONUPで処理
というか、ボタンコントロールを使えばいい
>>733
禿しく的はずれ
>>731
右クリックでメニュー出すのが目的なら、
サブクラス化してWM_CONTEXTMENUで処理するのが良いと思う。
>>730
そういう仕様です。WM_NCPAINTを使えば・・・
>>734
なんでだ?
> 732, 733, 735
ありがとうございます。
最終的にはサブクラス化をすることにしました。
おかげさまでボタン押下時にフォーカスがあることを示す矩形の描画や
マウスオーバーでリンクをハイライトさせる機能なども実装できました。
なにか難しそうなので敬遠していたサブクラス化でしたが
こんなに簡単なことならサッサとサブクラス化に踏み切るべきでした。
本当にありがとうございました。
739デフォルトの名無しさん:03/02/28 09:59
GDI+ で、Win32API の SetROP2 (だったかな)に相当する処理があれば
教えてください。
740デフォルトの名無しさん:03/03/04 14:15
定期age
741デフォルトの名無しさん:03/03/04 15:47
DWORDのHighワードとLowワードを入れ替えるマクロってありますか?
あったらおしえてください
742 :03/03/04 19:21
定義してしまえ
#definle MAKEREVERSEWORD(a) MAKEWORD(LOWORD(a),HIWORD(a))

お、間違えた。

直すのもメンドクサイので、自分で作ってみましょう。

とにかく、デフォルトではないってことです
Windows98を使っていて、アクセサリソフトみたいな
ものを作ろうと思っているのですが…

_MyGetFreeSystemResources32@4は、0が返ってくる
ことや、100が返ってくることはありますか?
GDIリソースとUSERリソースの両方の場合で。

返ってくる範囲が[1,99]に限られているような
気がします。

あと、GlobalMemoryStatus関数で得られる
MEMORYSTATUS構造体のdwTotalPhysメンバは
Windows98の実行中で変化することは
ありますか?

物理メモリの容量は一定のような気がします
Windows 98では変わらないと思う。
ただ、2000とかで休止状態で終了してメモリ抜き差しすると変わるかも・・・
休止状態の最中にメモリ抜き差しなんかしていいの?
747デフォルトの名無しさん:03/03/05 18:05
>>746
法的には問題なさそう
物理的にも問題無いな
休止中に2台のUSBHDDを差し替えると楽しいことになるそうだ
だれか試してくれ
つーか、休止なんかしないで、ちゃんとシャットダウンしろよ。
751デフォルトの名無しさん:03/03/06 01:25
GetASyncKeyState()みたいな感じで、
メッセージを介さずに現在のマウス位置を取得できる関数はありませんか?
752デフォルトの名無しさん:03/03/06 01:28
すんません、GetCursorPos()ってのがありました。
753744:03/03/06 03:12
_MyGetFreeSystemResources32@4
のほうはどうなんでしょうか
754名無し@沢村:03/03/06 22:08
皆々様方〜、ちょっと教えて下さらんか〜、皆々様方〜?
それはボタンだが、ふつーのボタンではかっこわるいのでオーナードローボタンにしたんだが、
どうもファイルを読み込んでいろいろ処理すると不正な処理というかページ違反が出てエラーになるのよ。
それがその処理をふつーのボタンを使ってするとどうもそのエラーは出んようなのよ?
だが、ふつーのボタンだとかっこ悪いだろ?
そこでAPIをいろいろ調べてみるとオーナードローではなくふつーのボタンにもビットマップを使えるようになっているらしいのよ?
だがこれは猫でもを読んでも出てないしやりかたわからんのよ?
皆々様方〜オーナードローではなくふつーのボタンでビットマップ使う方法ご存知ないだろうか?
皆々様方〜教えてはくださらんか?皆々様方〜♪
まあこれはボタンでごまかすよりファイル処理の方法を見直すべきだろうが…。
それがさっぱり見当つかんからとりあえずボタンでごまかそうと思うのよ。
皆々様方〜教えてはくださらんか?皆々様方〜♪
755名無し@沢村:03/03/06 22:29
bff64e82 cmp word ptr [ecx],6890

皆々様方〜、これ↑はデバッグしたときのその矢印のついた場所だが、これは何かな?
皆々様方〜、やっぱりふつーのボタンにしてもその処理をしてる最中は不正な処理は出ないが、最後にウインドウを閉じるとき不正な処理が出ることがわかったよ。
やはりファイル処理の方法で悪いところを見付けないとダメみたい…。
皆々様方〜教えてはくださらんか?皆々様方〜♪
休止なんかしないで注視しておけよ。
757どなたか教えていただけませんか。:03/03/07 01:11
ミューテックスについての質問ですが、1つのプロセスより起動される
2つのスレッドにおいて、スレッド1のCreateMutexで取得したハンドルと、
スレッド2で取得したハンドル(スレッド1のCloseHandleを行う前の状態)とでは
違うハンドルが取得されました。
1つのプロセスよりスレッドを複数起動して排他制御を行う場合は
このような使い方をしてはいけないのでしょうか。
どなたか教えてください。
WindowsXPの32bitアイコンはどうやって作るのですか?
新しいICO形式の解説はどこにあるんでしょうか?
759デフォルトの名無しさん:03/03/07 11:13
LANでUDPで通信を行うプログラムを作っているのですが
相手が低速のPCだと同期ズレがおこってるみたいなので
送信時に受信バッファーをクリアしたいのですが、
そういうAPIがあったら教えて下さい。
>>757
ハンドルの値は違って当たり前だ
MSDNのハンドルとオブジェクトの概要を穴が開くまで読め
>>749
復帰後に再認識されるだけの話じゃなかったけ?
762デフォルトの名無しさん:03/03/08 00:08
>>758
ビットマップが32ビットになってるだけじゃないか?
.rdataセクション.textセクションを.dataセクションに結合して
プログラムサイズを小さくする方法がありますが、
あれって特定の環境で起動しなくなったり起動速度や動作速度が
低下したりする副作用は無いんでしょうか?
教えて下さい。
764デフォルトの名無しさん:03/03/08 07:55
ウィンドウプロシージャ―の関数で
CALLBACKってつけますよね
これは予約語?型名?記憶クラス???
一体なんですか
ケツの穴に入れろという意味
766デフォルトの名無しさん:03/03/08 08:23
>>757
プロセスからミューテック巣を生成すればいいじゃん。
そしたらいくつスレッドを作ってもみーてくすはひとつだ。



    ハハハ                             イキデキネーヨ
   ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ハライテ-       ゲラゲラ
.  ( ^∀^ ) < あほか          ∧_∧       〃´⌒ヽ       モウ カンベン
.  ( つ ⊂ )  \_______   (^∀^ ,,)、     ( _ ;)        シテクダサイ >>766
   .)  ) )   ○   ∧_∧      ,, へ,, へ⊂),    _(∨ ∨ )_     ∧_∧ ○,
  (__)_) ⊂ ´⌒つ ^∀^)つ    (_(__)_丿      し ̄ ̄し     ⊂(^∀^ ⊂ ⌒ヽつ
          タッテ ラレネーヨ
           ワハハハ


>>757
もしかして、ハンドルが変われば別のミューテックスオブジェクトを挿すとか
思ってる?
>>764
WinDef.h
#define CALLBACK __stdcall
LOGFONTのlfHeightに入れる値の
キャラクタ高とセル高の違いを教えてください
ノートの罫線の間隔と文字の大きさの違い
772デフォルトの名無しさん:03/03/09 08:22
ユーザが勝手に窓の大きさを変えられないようにするには、
CreateWindowにどういうオプションをつけてやればいいんですか?
>>772
WS_THICKFRAMEをはずせ。
最大化もしたくなかったらWS_MAXIMIZEBOXもはずせ。
ていうかMSDN嫁。
CreateWindowで親の外に移動させれるような
子ウインドウは作れますか?
子ウィンドウは親ウィンドウの外に移動できない仕様です。
所有されたウィンドウならWS_CHILDを外してhwndParentを
指定すれば作れます。
776デフォルトの名無しさん:03/03/09 18:13
WM_KEYDOWNの0-15bitのリピート回数の所なのですが、
常に1が入っていて機能してないように見えるんですが、、、
どうなっているのでしょうか?
777デフォルトの名無しさん:03/03/09 22:17
モードレスダイアログを二重起動しないようにするためにはどうしたらいいですか?
>>777
それくらい自分で考えろや
>>777
if(!(二重起動になるか ?)){
 起動する。
}

二重起動を検出する仕組みは自分で考えろ。
Singleton
ダイアログをクラス化して>>780にするのが>>779よりスマートな方法
singletonは実装内部で>>779をやるから、
本質的には全く変わりない罠
783777:03/03/09 23:59
>>779-782
サンクスです。
ダイアログは既にクラスになってるので、singletonでやります。
Singletonはいいですね。目から鱗が落ちました。
784デフォルトの名無しさん:03/03/10 00:34
質問お願いします。ダイアログベースのアプリを、WTLのウィザードで作った場合、
イベント追加の際は、ダイアログのヘッダファイルにごりごりコードを書くことになりますよね。

ですがヘッダに書くのが嫌だとか、あるいはsatic関数を使いたいとかで、
実装部分はcppの方に書きたいことが良くあります。

しかし、WTLが吐き出した、WinMainのあるcpp以外に、
ダイアログの実装部分を書くと、どうやっても何かしらエラーが出てしまって…。
これを回避できている方はいらっしゃいますでしょうか?

たぶんレスは、いただけないだろうなと思いつつ(笑
>>784
ウィザードのgenerate .cpp Files ONにして、普通にcppに実装書いてるけど。
>>785
むはー感動。この板でWTLの質問が通ったのは初めてです!
ちょ、ちょっとお待ち下さい、generate .cpp…むーどこだ…。
ちくしょう、折角のチャンスにオレってやつぁ…。ちょっと探してきます。

というか環境書いて無かった。当方VC6でwtl70です。
.NETだけとかじゃありませんように(;゚人゚)
787784=786:03/03/10 00:54
あうー、やはり.NETだけみたいですね…。
ttp://homepage1.nifty.com/Roy_/Program/StartWTL.htm

逆にいえばVC6じゃ難しいのかな…。
それが分かっただけでも良かったです。ありがとうございました。

しっかしダイアログひとつのアプリなんて殆どないだろうに…。
もちっとこう使いやすくしてくれれば良かったのになぁ…グチグチ
>>787
VC6にもあるって
>>788
ややや、本当なら冗談抜きで凄い嬉しいのですが(゚∀゚)

ただ、うちのWizardだと…ええと、ちょうどいい絵があるサイトが
ttp://hp.vector.co.jp/authors/VA016589/wtl/appwiz/appwiz.html

ここはたぶんWTL3.0のものですが、うちのWTL7.0でも
この2つ以上のWizardダイアログは、表示されないんです。

長々すいません。できればもう少し詳細など、教えていただけないでしょうか。
>>789
ウィザードだけWTL3のままだったとかいうオチじゃないの?
>>789
めくらって呼んでいいですか?
http://sakots.pekori.jp/imgboard/imgs/img20030310011058.png
792デフォルトの名無しさん:03/03/10 01:13
さ ら し あ げ
>>790
ご指摘感謝。
しかし…いやぁ、さすがにそれはないです。

>>791
何を言われようが、これは本当にありがたいです。

むー、しかし、何故うちのではこれが出ないんだ…。
最新のWindows SDKを入れなければなのかな…。
俺は、MyAppクラスみたいなもんを作って、ほとんどそこで実装してるが・・・
実際ウィンドウ関連の実装はほとんどないし。
WTL70\AppWiz60\setup.jsを実行し直せ
そもそもVC6は、テンプレート使ってるクラスはヘッダファイルに実装を書かないといけない
バグがあるって聞いたが・・・
797793:03/03/10 01:51
あふぅ、だみだぁ(´ω`)
空いてるPCにVCつっこんで(規約違反ですが)
SP5まで当て、ついでに>795氏の命を受けスクリプト連打しても出ません…。
まさに目の前ににんじん吊られた馬状態_| ̄|○

>>794
確かにコモンコントロール周りさえ使えれば十分ですよね。諦めるかぁ(´Д`)
>>796
あ…言われてみれば!

とにかく今日は良いこと知れて幸せでした。
レス下さった皆さんに感謝、ありがとうございました。
二つ以上表示されないって言ってたが・・・・
二つ表示される一つ目で設定するんだぞ?
もしかして正規のインストール手順を践まなかったせいでVC6でも表示されているのだろうか?
今VC6入ってないんで確かめられないが、他の人は表示されてるん?
可能性1
過去のAtlApp60.awxがReadOnlyである
可能性2
793が盲
WTLで盛り上がってるようなので便乗ですが、
WTLのクラスにprivate変数を定義しても、
そのクラスの外から直接読み書きできてしまうのは仕様ですか?

ちなみにうちのVC6はGenerate .cpp Filesあります。
んなこたぁない
804793:03/03/10 02:35
床についてピンと来たのですが、
もしかしたらオレが、全てのコンポーネントをインストールしなかったせいかも…。
元々から何せMFCすら入れてないので…明日試してみます。

>>798 >>801
いやいや、粗忽者の私ですが、さすがにその辺は大丈夫です。

>>799 >>800
それならそれで、やり方気になりますよね。
WTLにてフレームウィンドウをスプリッタで左右に分割し
それぞれにリストビューを貼り付けているのですが、
この左右のリストビューそれぞれの上部にステータスバーを貼り付けるには
どうすれば良いのでしょうか。
リストビューのメンバにCStatusBarを加えてリストビューのOnCreateで
ParentWindowとしてスプリッタのm_hWndPaneを指定してCreateしてみても
表示されずうまくいきません。
すいませんあげ忘れました。
スプリッタの子として、子フレームを作り、
そこにステータスバーとリストビューを乗っける
>>807
できました。ありがとうございました。
Viewアーキテクチャって簡単そうに見えてなんか複雑なんですね。
今までBCB使ってたのでいまいち分かりません。
809808:03/03/10 23:49
出来たと思ったのですが、
下部に作成する事は出来たのですが、
ステータスバー属性にCCS_TOPを追加して上部に作成しようとすると
リストビューのカラムの名前を表示する部分と重なってしまいます。
上部に追加するのは無理でしょうか…

CreateSimpleStatusBar("", WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN |
 WS_CLIPSIBLINGS | CCS_TOP);
CreateSimple〜じゃなくて、
CToolBarCtrlをインプリメントして、
ChildFrame.m_hWndToolBar = Toolbar;
とすると出来ると思う
あー、
ChildFrame.m_hWndToolBar = StatusBar;
ね、スマソ。
812808:03/03/11 00:52
>>810-811
今度こそ出来ました。ありがとうございました。
すみません、こちらでDEV-C++を使っている方はいらっしゃいますか?
使っている方がいらっしゃれば訊きたいことがあるのですが。
ChildFrame.m_hWndToolBar = StatusBar;って・・・
凄いコードだな・・・
いいのかそんなんで・・・
WTLのフレームはツールバーが上、ステータスバーが下と決め打ちしてるから、それしかない。
独自のフレームクラスを定義するしかないな。
816デフォルトの名無しさん:03/03/12 22:20
VC++6.0でリソースに256色のツールバーを追加することは出来ないのでしょうか?
817デフォルトの名無しさん:03/03/12 23:37
グループボックス(ラジオボタンが組になったもの)をCreateWindowExで
作成するには、なんという引数の命令を使えばよいのでしょうか?
>>817
基礎から勉強しましょう。
最初からやりたいことをやろうとガっついても、結局何もできません。
ていうか、どう考えてもネタだよな…。
>>819               ぬるぽのせいでコレが気になって気になって・・・
基礎から勉強しましょう。     ↓
最初からやりたいことをやろうとガっついても、結局何もできません。
ていうか、どう考えてもネタだよな…。
821デフォルトの名無しさん:03/03/20 20:18
プログレスバーに進捗状況(文字・数字)を表示したいんですけど、
そういうAPIってあるんでしょうか?
TextOut
823デフォルトの名無しさん:03/03/21 18:48
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _malloc はすでに LIBCD.lib(dbgheap.obj) で定義されています
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _fclose はすでに LIBCD.lib(fclose.obj) で定義されています
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _fopen はすでに LIBCD.lib(fopen.obj) で定義されています
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _free はすでに LIBCD.lib(dbgheap.obj) で定義されています
LINK : warning LNK4098: defaultlib "MSVCRTD" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください
LINK : warning LNK4098: defaultlib "LIBC" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください
Debug/AD.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました

こんなのがでました。
ライブラリとそのヘッダをインクルードしているのですが、
そちらの関数を呼び出すと、このエラーがでるようです。
どうすれば解決するでしょうか?
>>823
再定義しなければいい。
隣家が対処方法教えてくれてるジャンジャン。
826824:03/03/21 18:51
いや、/NODEFAULTLIB:library ←これだな。
827823:03/03/21 18:52
ん〜。どうすればいいのでしょうか?
828824:03/03/21 18:53
>>827
ご丁寧に教えてくれているじゃないか。
使用してくださいと言っているのに・・・
830823:03/03/21 18:55
/NODEFAULTLIB:library ってどこにあるのでしょうか?
>>830
どこって・・・オプションにそれを加えるんだよ・・・
832名無し@沢村:03/03/21 19:17
ランタイムライブラリの指定をいろいろ変更してみる
MFCの使用オプションをいろいろ変更してみる
833デブおた山崎渉 :03/03/21 19:18
  ∧_∧
  ( ´;^;ё;^;)<これからも僕を殺して下さいね( ´;^;ё;^;)。
=〔~∪ ̄ ̄〕
= ◎――◎                     デブおた山崎渉

834823:03/03/21 20:44
いろんなとこのオプションに加えたのですが、解決しません…。
ああ、もうしょうがないなーもう
一回だけだよ?いいね?
cl ... /link /NODEFAULTLIB:LIBCD.LIB
>>823
ライブラリのコンパイルオプションに/Zl
>>823
VC++6だったら
プロジェクト(D)→設定(S)...→リンクタブ
の"デフォルトライブラリを全て無視"にチェックを入れる
838デフォルトの名無しさん:03/03/22 16:50
質問お願いします。
VC++6にて、Debugモードでは問題なく動いているソースが
Releaseになるとダメになってしまいます。
こういう場合はどういう問題があることが多いのでしょうか。

一応警告レベルは最高にし、直せる所は全て潰しました。、
最適化も一通り変えてみたところ、「実行速度」の時だけかろうじて動き、
後のものは(最適化なしも含めて)全く動かない始末です・・・。
初期化されていない変数。
840838:03/03/22 17:26
>>839
レスありがとうございます。
キーワードのおかげで、いくつか有用なサイトを見つけることが出来ました。感謝です。
841823:03/03/22 20:50
>837
(涙
無視にすると、とってもエラーが増えます…。
どうすればいいのでしょう?
ぱにっくです。
だから、燐火が答えを教えてくれてるだろーが
詳しくはヘルプにk
843823:03/03/22 21:30
Debug フォルダを消してコンパイルすると何となく解決しました。
ありがとうございます。
これを設定ではなくソースファイルに書くことはできますか?
#pragma みたいな。
だからh
845823:03/03/22 22:04
h なにすか?
>>838
同じような経験あるのだが、結論をいうとプログラムにバグがある。
浮動小数点の精度のあたり調べてみたら?
847デフォルトの名無しさん:03/03/22 23:13
デストラクタのチルダとは、~←これでしょうか
>>847
これでしょうよ。
>>823
ヘルプの #pragma 見れ
850デフォルトの名無しさん:03/03/22 23:49
MFCのCFileというクラスで
fileOut.Open(trgtname + strConFilePath,
CFile::modeCreate | CFile::modeWrite | CFile::shareExclusive,
NULL);
fileOut.Write(buf, sizeRead);
fileOut.Flush();
fileOut.Close();
というソースがあるのですが、sizeReadはバッファの長さとして、(本当はwhileがあるのですが)
れを、open, wrhite, close で書き換えたいのですが、
if((fp = open(fname, _O_BINARY)) == NULL){
return false;
}
write(fp, buf, sizeRead);
close(fp);
とまでは、かけたのですが何かうまくいきません。
どう書くべきですか?
教えてください。
#pragma comment( linker, "/NODEFAULTLIB:msvcrtd.lib" )
#pragma comment( linker, "/NODEFAULTLIB:libc.lib" )
見比べれ

Windows Programing for C/C++(Not MFC)
http://pc2.2ch.net/test/read.cgi/tech/1018239290/

■ VisualC++(MFC限定)相談室 MFC7.dll■
http://pc2.2ch.net/test/read.cgi/tech/1047949606/
853デフォルトの名無しさん:03/03/23 18:44
初心者なんですが、
コンストラクタでこういう初期化していいんですか?

CFoo::CFoo() {
  ::ZeroMemory(this, sizeof(CFoo));
}
>>850
ネタですか?
>open(fname, _O_BINARY)
これで書き込みできたら困ります。
>>853
で、実際にやってみた
エラーとか出ないなら大丈夫では?
しかし私はそういう風にやったことないな

初期化は
CFoo::CFoo()
: xxx(1)
, yyy("abc")
{ ... }
みたいにしてるから
×で、実際にやってみた
○で、実際にやってみた?
858デフォルトの名無しさん:03/03/23 20:04
パケットモニタを作りたいんですけど
Winsockじゃ出来ないみたいなんですが...。
どうすればよいかヒントください。
>>858
Winsockで、できますちゃんとグーぐるしましょう
キーワードは”RAW”
860853:03/03/23 20:31
>>855
>>857

ご教授ありがとうございます。
クラスの将来性を考えると、
>>855さんの方法が確実だと思います。
winpcap
862850:03/03/23 21:15
比べたのですがよくわからないです。
教えてもらえませんか?
Not MFC
864850:03/03/23 21:30
はい。openの方は(使いたいのは)Not MFCです。
865デフォルトの名無しさん:03/03/24 01:32
>>859
ありがとさ〜ん。調べてみます。
Win9xでflockのような同期処理を行う方法ってありませんか?
ようするに、既に共有ロックされている状態で排他ロックをすると、排他ロック
とそれに続く共有ロックがブロックされ、共有ロックが解除された時点で排他
ロックのブロックが解除されるような動作です。
NT系だとLockFileExがまさにそのような動作をしてくれますが、9x系で実現する
にはどうしたらよいのでしょうか?

ロックの対象はファイルでなくても構いません。
(イベントとセマフォの組み合わせで出来る??)
単純にやるんだったらディレクトリ作成・削除の排他制御でも使えば?
>>866
そのファイルをロックすることが重要でないのならミューテックスを使った方がいいよ。
UNIXのロックもロックを無視して開くことはできるから
そういう意味ではMutexのほうがより忠実なシミュレートになりそう
870866:03/03/24 18:53
Mutexも考えていますが、確実に同期が取れる手順ってあります?
共有ロックはMutexを取得するとして、排他ロックをどうするか…
Eventを使おうと思ったけれども、ResetEventとWaitForSingleObject
を同時に行うことが出来ないので、タイミングによっては問題が発生
しますし。
Semaphoreを使えばWaitとResetが同時に出来ますが、Waitだけを行って
カウンタを減らさずにWaitができないから、共有ロック側をブロック
することが出来ません。
>>870
InitializeCriticalSectionはどう?

詳しくは
http://www.kumei.ne.jp/c_lang/
87章あたりから参考になるかもぽ
872866:03/03/24 19:44
クリティカルセクションはプロセス間での同期には使えないので…
873デフォルトの名無しさん:03/03/24 21:06
お聞きしてもよろしいでしょうか?
SDKでプログラミングをしていて、実行ファイル自身のパスを取得するにはどうすればよいでしょうか?
>>873
GetModuleFileName
>>870
共有ロックは普通のファイルロック、排他ロックはミューテックスというのはどうだ?
>>873
GetModuleFileNameEx
877デフォルトの名無しさん:03/03/25 00:34
>>870
つーか複数プロセスが同時にアクセスするようなモデル?
面倒だからファイルのリネーミングを使っちまえば?
ファイルがリネームできないときは誰かがロックを取ってるってやつで。
もしくはファイル名でハッシュ値を出して、そのハッシュ値でロックディレクトリを作成。
作成に失敗したらロック獲得失敗。
まあどれも古典的な方法だけど、Mutexとかを使わないんだったらこれぐらいしかないんじゃない?

いってしまえば、別にきちんと規約を決めればMutexでも排他ロックはできるけど。
878デフォルトの名無しさん:03/03/25 00:47
/************************************************/
/** 練習プログラム **/
/************************************************/

/* このプログラムは、1以外の文字に対して、全て「はずれ」
/* と表示するプログラムです。
#include<stdio.h>
int main()
{
char keroman[723] ; /*入力文字を保存するための変数*/
printf("1,2,3から、好きな数字を入力してEnterを押してください\n") ;
printf("1\n 2\n 3\n") ;
gets(keroman) ;
if(keroman[0]=="1"){
printf("%sは正解\n",keroman) ;
}
else{
printf("はずれ!\n") ;
}
}

コンパイルができません。
11行目で「warning: illegal pointer combination(==)」という
バグがでてしまいます。。
大変申し訳ありませんが、
10分考えても解決できないので誰か教えていただけないでしょうか?
879デフォルトの名無しさん:03/03/25 00:54
>>878
5行目のコメントの終了位置を間違えてました。
「/* と表示するプログラムです。」ではなくて
「 と表示するプログラムです。*/」でした。

ごめんなさい。
880デフォルトの名無しさん:03/03/25 01:03
>>878
if(keroman[0]=="1")が
char型とcharのポインタ型の比較だからじゃないの?
'1'でやれば?
なんでまたこのスレで聞いたんだろう・・・
882デフォルトの名無しさん:03/03/25 01:12
>>878
っていうか3時間ぐらい考えろ。馬鹿。
883デフォルトの名無しさん:03/03/25 01:21
>>882
分かった。3時間ぐらい考えます。
すぐ聞くなんて、バカだなぁ。俺。あははは。
884デフォルトの名無しさん:03/03/25 01:25
>>880
ありがとうございます。
おかげでちゃんと動きました。
>>884
これはしごく基本的な内容だから
きちんと参考書読みましょう

たしか初心者向けのCかC++スレあるから
今後はそちらで聞くのを薦める
886870:03/03/25 05:14
>>877
Win9x環境下でのflockの完全な実装がとりあえずの目標です。
そのためのロックメカニズムを考えているところです。
Mutex等は使わないわけではなくて、どんな状況でも確実に動作するものを
考えていて、なおかつパフォーマンスも重視しています。

結論から言うと、ミューテックスとイベントとセマフォを使って完璧と思わ
れるロック機構はできました。(まだ動作テストはしていませんが)
しかし、共有ロックと排他ロックでアンロックの手順が変わってしまうので
flockの実装が少し面倒です。
SignalObjectAndWait…はWin9xだと使えないのか
LockFileExはよくて、LockFileはダメなの?
889870:03/03/25 18:59
パフォーマンスを気にしなければSleepとLockFileの組み合わせでもいいけど。
890デフォルトの名無しさん:03/03/26 04:45
質問です。

ShellExecuteExとWaitForSingleObjectで、起動した別プロセスの監視を行おうとしています。
起動するファイルを"C:\test.html"などとした場合は正常に動作するのですが、
"http://XXX.com/test.html"などネットワーク上のファイルにした場合
IEが起動した直後に処理が返ってきて上手くいきません。

理由と、解決策があれば教えてください。
ちなみに、WaitForSingleObjectの返り値は WAIT_FAILED で
GetLastErrorとFormatMessageの結果は「この操作を正しく終了しました」でした。
参考)
ttp://yokohama.cool.ne.jp/chokuto/urawaza/api/ShellExecuteEx.html
ttp://yokohama.cool.ne.jp/chokuto/urawaza/api/WaitForSingleObject.html
>>890
想像で答えるが、たぶんShellExecuteEx等にURLを渡すと、cmd.exeか何かが
実行されてそこからIEが起動されるんだと思う。
IEを起動した時点でcmd.exeは終了してしまうから、そこでWaitForSingleObject
から帰ってくるのではないかと。
892890:03/03/26 07:35
なるほど。今日帰ったら確認してみます。

(どう確認しよう…
そしてその場合、プロセスハンドルを取る方法って
プロセスの名前から調べる位しかなかったような…)
ShellExecuteEx等はプロセスを起動するとは限らない
DDEですでに起動しているプロセスにに文字列をを
渡すだけの場合もある。
何か、そういう処理をやってそうなのって explorer.exe っぽい
お聞きしたいのですが、
ウィンドウハンドルから、すでにウィンドウが破棄されているかどうかを調べたいのですが、
どのようにしたら良いでしょうか?
API 等があるのでしょうか?
896デフォルトの名無しさん:03/03/27 15:17
MFC使わないでダイアログベースのプログラムを書く簡単な方法ってどこかにないですか?
お願いします。
BCB使う
>>896  ダイアログベース DialogBoxで、ぐぐれ
>896
猫プロ
>>899
おそらく>>896はそれが !簡単 な方法だと思ってるんじゃないかな
902896:03/03/27 16:31
>>898
どうもありがとうございます。
ありがとうと言われたのは 898 だけ
>>903
いや、902は905の間違いだと思われ
905デフォルトの名無しさん:03/03/27 23:03
>>1乙でし!!
誤爆?
907896 -> 895:03/03/28 00:56
902 の 896 は 895 の間違いでした。
混乱させてすんまそ。
>>895
IsWindowかな。
909デフォルトの名無しさん:03/03/28 01:42
質問です。
ドライバなどの更新で使用中のファイルを置き換えることがあると思いますが
あれはどのように実現しているのでしょうか?
Windowsに「再起動時にこのファイルを置き換えといて」バッチみたいな機能
があるのでしょうか。
それとも元ファイルを使用中のままRenameし、新ファイルを元の名前で新たに
作成して、次に読むときに入れ替わるのでしょうか。しかし、この方法だと
Renameした古いファイルを誰かが消す必要がありそうです。
それともドライバやサービスは実行中でもファイルを置き換えられるの
でしょうか。
910909:03/03/28 01:46
あと、逆に使用中のファイルのRenameをさせない方法はありますか?
>>877を参考にすると、実行中に自分自身をロックすればいいのですかね。
911890:03/03/28 01:56
どもです。
結局、CreateProcessとWaitForSingleObjectで監視することにしました。
この場合、実行するプログラムの場所を指定する必要があるので
レジストリに新しく値を作ることになりましたが…
>909
> Windowsに「再起動時にこのファイルを置き換えといて」バッチみたいな機能
> があるのでしょうか。
NT系だとMoveFileExがあるな

> それとも元ファイルを使用中のままRenameし、新ファイルを元の名前で新たに
使用中のファイルってリネーム出来たっけ?
EXE とか DLL ってメモリマップトファイル使ってて、実行中は常にロックされてる
んじゃなかったか?
>>911
関連付け情報からパス引っ張ってくれば?
>>912
> 使用中のファイルってリネーム出来たっけ?
NT系だとできるっぽい。
915デフォルトの名無しさん:03/03/29 11:58
最近よくある画面右下にせりあがってくる通知ウィンドウって
どうやって作るんですか? IEの機能かな
>>915
ツールチップ?
917915:03/03/29 13:43
>>916
いえ、デスクトップの右下に、下から伸び上がるように出てくるウィンドウです。
名前が分からなくて検索とかで調べられないんです。
たとえば、
MSN MessengerのHotmail到着通知
Norton AntiVirusのDATファイル更新完了通知
McAfee Personal Firewallの攻撃検知通知
のときのウィンドウのことなんです。
>>917
だからツールチップ。
920915:03/03/29 16:56
レスありがとうございます。

>>916,918
ああああ、すみません。
ツールチップときいて他のものだと決め付けてしまっていました。

>>919
ソース付でスキンも使用可能とは!
さっそく使わせていただきます。
ウィンドウ幅が狭くなってメニューが2段になると AdjustWindowRectEx() が破綻します。
メニューが(時として)2段になってしまうような場合に、クライアントのサイズから
ウィンドウのサイズを計算するにはどうすればよいのでしょうか。
WM_NCCALCSIZEを送って合わなかったら調整してます
>>921
要求クライアントサイズに合わない分、ウインドウサイズを調整しる。
足りないなら増やせば良いし、多ければ減らせば良い。
GetClientSizeとGetWindowSizeとSetWindowPos使えば簡単に
出来るよん。
>>922-923
早速のレスありがとうございます。 おかげで多段メニューにも対応できました。
そりゃそうだ、実際にウィンドウを作成してみれば誤差が計算できるんですよね。
何もかも作成前に準備しようとしていたので考えもつきませんでした。
嗚呼、悔しい恥ずかしい。

それにしても AdjustWindowRectEx() が存在する意味っていったい……
GetWindowRgn()で得たリージョン(のハンドル)は
閉じる(CloseHandle)必要がありますか?
926925:03/03/30 17:07
あと、GetWindowRgn()の第2引数って
どうしてHRGNへのポインタではないのでしょう?

GetWindowRgn(hwnd, &hrgn)ではなくて、
GetWindowRgn(hwnd, hrgn)とすることで
リージョン(のハンドル)が得られるのでしょうか?
>>925
GetWindowRgnはリージョン自体を得るわけではなくリージョンの内容のコピーを取得する

次からは自分で検索ぐらいはしような
http://www.microsoft.com/JAPAN/developer/library/jpgdipf/_win32_getwindowrgn.htm
928sage:03/03/30 19:38
Win32API の 〜W(UNICODE用関数) と 〜A(マルチバイト用関数)
を統一的に扱いたくて作ったセレクタ

template< typename CharType > struct function_selector;
template<> struct function_selector< char >
{
 template< typename FuncA, typename FuncW >
 static inline FuncA select( FuncA fn, FuncW ){ return fn; }
};
template<> struct function_selector< wchar_t >
{
 template< typename FuncA, typename FuncW >
 static inline FuncW select( FuncA, FuncW fn ) { return fn; }
};

使うときは、

template< typename CharType >
inline void alert( const CharType* msg, const CharType* cap )
{
 function_selector<CharType>::select( MessageBoxA, MessageBoxW )
 ( GetActiveWindow(), msg, cap, MB_OK|MB_ICONWARNING );
}
とやると。Generic programming のお供にどう?
_TCHARを使わない宗教的理由でもあるのか?
オーバーロードでもよさそうだな
931925:03/03/30 21:23
>>927
ありがとうございました

あと、次からそうします…
>>929
たとえば、自作ライブラリで、ワイド文字メインだけど、
charしかサポートしていないライブラリを併用したいときとか。
双方をサポートするようにしないといけない関数がたくさんあって、
いちいちオーバーロードするのが面倒なときとか。

try{ ... }
catch( wchar_error& e ){ alert( e.what(), L"WideError!" ); }
catch( tchar_error& e ){ alert( e.what(), _T("TchError!") ); }
catch( std::exception& e ){ alert( e.what(), typeid(e).name() ); }

例としてはよくないけど…
alert定義するのも、オーバーロードさせるのも手間はかわらんと思うが。
934デフォルトの名無しさん:03/03/31 01:44
age
935デフォルトの名無しさん:03/04/01 02:39
FOXToolKitとか
FltkとかのGUIライブラリの話題って
最近めっきり減ったな
936デフォルトの名無しさん:03/04/01 14:58
937テンプレ:03/04/01 15:36
Windows programming by C/C++ without MFC Part2

Windowsプログラムを作るにあたって、
API以外の疑問や質問をぶつける為に作りました。

自分もMSの摩訶不思議な規則や仕様(バグ)等に悩まされてます。
質問や疑問以外にも、プログラミングしていて気付いた事や発見等も
書き込んでくれると有難いです。

関連スレ
http://pc2.2ch.net/test/read.cgi/tech/1047819779/ Win32API 質問箱 Build10
過去スレ
http://pc2.2ch.net/test/read.cgi/tech/1018239290/ Windows Programing for C/C++(Not MFC)
グラフィックソフトで、タブレットの筆圧を感知するにはどうしたら良いのでしょうか?
939デフォルトの名無しさん:03/04/01 20:47
スクリーンセーバー作ってるんですが、
IMFのウィンドウが最前表示でじゃまです。
どうすれば後ろに隠せますか?
国際通貨基金?
941939:03/04/01 21:37
>940
間違えました。
IMEです。
そのIMEは、どのプロセスに張り付いてるIME?
943939:03/04/02 06:49
うっ。まだ初心者なんでわかりません。
プロセスってなに? そこは勉強しときます。

そしたらそのプロセスの場所がわかれば
隠すことも可能なのですか?
>>938
ttp://www.pointing.com/
で、Wintab の SDK (WTKIT126.zip) を落としてきて、それを使え。
使い方とかは、Wintab でググれば、なにかしらの情報は手に入る
945デフォルトの名無しさん:03/04/02 10:51
誰かウィルスダウンロードしてるとこの画像みたいな画面みたいなヤツくれ
文字が流れてくやつ。
もちろん嘘っぱちの
>>945
あのダイアログを出したいのか、あのアニメgifファイルがほしいのか、どっちだ!?
Drectxを使ってフルスクリーンモードで描写しながら
DialogWindowを表示したいのですが
いい方法しりませんか?
1000になる前になんとかならないでしょうか?
眠くて間違えました。
DirectX
Dialog box
でした。


>>947
DX8以外ならできる。
DX9ならSetDialogBoxModeを使う。
>>947はマルチ

Win32API 質問箱 Build10
http://pc2.2ch.net/test/read.cgi/tech/1047819779/l50
951947:03/04/04 02:34
あ、りがとうございます。
Directx5使ってました。
SDK新しいのいれます。
散々さわいどいてすみません。
明日までにまとまらないと
チームリーダーに殺されるので、
DirectX5でも出来る。
でも、マルチだから教えない。
しかも態度がでかい(マルチ先参照)
殺されりゃいいのに
C++相談室にもマルチポストしてたのか。
探せばもっと出てくる?
今頃チームリーダーに殺されてるかな?
956デフォルトの名無しさん:03/04/04 14:38
クリップボードに書き込んだり消したりするプログラムを作成しようとしています。
しかし、MSDNライブラリを見てもMFCやVBしか検索できませんでした。

Win32SDKで作成できる関数などは用意されているのでしょうか?
もしありましたら名前を教えてください。
あとは自分でやります。よろしくおねがいします。
>956
BOOL EmptyClipboard(VOID);
など
>>957
ビンゴ!ありがとうございました。

それにしてもMSDNの検索は使いにくい・・・
VBはもういらないんですけどね・・・
>>952
俺の記憶ではできない気がするのだが、、
>>959
実際に試したことはないが可能だったと思う
Dialog表示中はフリッピングできないようだが
>>560
あぁそれでならできるか。
やっぱAPIスレと違いが不明確だなあ。
963 :03/04/06 15:48

ここの正しいタイトルは C/C++ for Windows Programming ではないのか?

とりあえず統合するしかないだろう。

Win32API 質問箱 Build10
http://pc2.2ch.net/test/read.cgi/tech/1047819779/
>>963
そうだね。>>1-2見れば単発質問重複スレだと言っても過言じゃない。
WTLについても>>963でやんの?
>>965
ATLスレでやってる
962=963=964=966
このスレに恨みでもあんの?
sage進行なのによくチェックしてるよね(w
>>962-968
自作自演だろ?
>>967
似たスレチェックするのめんどうだから統合して欲しいわけだが。
もうすぐ1000だし別によくない?
ねーねー千取り合戦とかしないの?
ム板の合戦は990から
973>>972 マジ!:03/04/08 01:07
     \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < ネェー、1000取り合戦してくださ〜い         ,,、,、,,,
     /三√ToT) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
,,、,、,,, U (:::::::::::)  ,,、,、,,, タリー          タリー
      //三/|三|\         (\_/)        めんどくせー   タリー
      ∪  ∪           (  ´Д)    タリー    勝手にやれよ
 ,,、,、,,,       ,,、,、,,,     /   つ(\_/)   (\_/)ノ⌒ヽ、
      ,,、,、,,,          (_(__つ⊂(´Д`⊂⌒`つ(´Д` )_人__)
9741:03/04/08 12:32
ええっと、このスレ立てた1です。
英語が間違ってたとか単発質問スレだとか重複スレだとか
言われてますが、自分の言いたかった事がうまく伝わら
なかったようで、申し訳ないです。

>>40で言っているように1のコテハンはそこで止めているので
単発の質問では無かったのですが(その後にも色々、質問&
解答してるし)

やっぱり、不要ですかね。このスレ。単純にみんなWindows
Programでウィンドウ管理やビットマップ・サウンド処理等
どういう感じで扱ってるのかノウハウを共有しようと思ったの
ですが、失敗でしたかね。

APIの質問とかでは無く、「使いこなし方」みたいなのを語ろう
としていたのですが…。最近ではHBITMAP構造体は、Windows
のDDB管理だけじゃなくて、自前のオリジナルBitmap構造体
としても使えるなー。とか・・・まぁ、どうでも良い事ですけど(^^;

まぁ、そんな感じで、そろそろ1000が近づいてきましたね。
長々と付き合ってもらって、ありがとうでした。
>>974
でも>>956-957みたいな質疑応答が平然とされてるからねえ
事実として使い分けができてないと思うわけよ
応用的な話題でもAPIスレでやっていいと思うし
976デフォルトの名無しさん:03/04/08 14:53
>>974
漏れは、結構このスレ気に入ってたんだけどね。
WIN32API質問箱の方は、なんか親切じゃないってゆうか・・・
言葉のあげあし取りみたいなのが嫌だったんだけど

もしかしたら、このスレを否定してる人って、WIN32APIスレの
人達なのかもね。

別に、まったり進行でWIN32APIとかぶらない程度にPart2に
行っても良いと思うんだけどなぁ。
>>976
そらかぶらないならけっこう。完全に別スレとしてチェックする。
でも今のところかぶった話題満載で同じスレをまたがってチェックしてる感覚。

つーかスレの雰囲気が嫌だからって理由で別スレ立てるのは反対。

Windowsプログラミングについてのノウハウ・使いこなし方等を共有するのはいいけど、
言語やフレームワークに依存する以上、各スレでやった方が参加者も多いし
言語・技術を元にした具体的な話ができるので、結果的にはその方が共有財産に
なると思うのだけど。
>>977
>言語やフレームワークに依存する以上、各スレでやった方が参加者も多いし

このスレ
言語=C/C++
フレームワーク=WindowsでC/C++扱えるフレームワーク(MFCは除く)
議題=C/C++でのWindowsProgramに関するノウハウ

WIN32API
言語=C/C++/VB/Delphi等WIN32APIが扱える言語
フレームワーク=WIN32APIが扱えるフレームワーク
議題=Win32APIについての質問

だから、別スレにするんじゃないの?
そもそも、>>1でそういう定義してるのに、それを無視して書き込むやつらを
例にして、「…だから、このスレいらない」は違うのでは?
>>978
>各スレでやった方が参加者も多いし〜
MFCスレを除くWindows系C/C++スレで十分だろという話
>978
とりあえず、このスレの1~900あたりまでで、
「APIスレで扱うのに不適当で、このスレでよかった」
ってレスをいくらか挙げてもらえんか。
今の議論とは直接関係ないのだが、俺は、Win32APIスレはAPIの質問というよりは
(たしかに〜なAPIありませんか?という質問もあるが)、APIを使ったWindowsプログラミング
に関するスレという認識だ。
>>1自身が書いた>>2なんかはAPIを使ったWindowsプログラミングの話そのまんまだと思うんだがどうか。

そもそも言語・開発環境スレは、もちろん言語・開発環境自体についての質問もあるが
それらの言語・開発環境を使ったプログラミングに関する話題も扱っている。

このスレにはC++でCOMなレスもあるが、それならCOMスレがあるし、WTLならATLスレがあるし、
VC以外のC/C++ならC++Builderスレもその他コンパイラスレもあるし、
MFC以外のクラスライブラリならそれ用のスレもあるし。
ここのスレタイも紛らわしいよな。
いっそ「Windowsプログラミング雑談スレ」とかだったらわかりやすかった。
まぁ雑談はマ板逝けってことになるんだが。

>1がノウハウ共有の為にスレッドを立てたのであれば、
疑問・質問はスレ違いとなるべきであった。
しかし>1は疑問・質問のスレッドであると明言している。
これは明らかに>1の不備であり、
推測するに、>1は自分が質問したい事があったが、単発質問スレではないように装っただけ。

質問・疑問を受け入れる事をやめ、適宜誘導をしてこなければならなかったのだ。
そしてノウハウを提供したり、議論したりするためのスレッドへ変化せねばならなかったはずだ。
さらに、その場合は>1が率先して話題を提供する事が望ましい。

我々このスレッドの多くの住人達は、スレ違いの質問に親切に答えた。
だがしかし、それらの行為は否定された。
>1の不備とはいえ、質問・疑問を受け入れるスレッドであるにもかかわらず。
はたして>978はこのスレッドの為に一体何をしてきたの言うのだろうか。

さて、このスレッドに次スレが立つとすれば、
  ・ MFC ATL WTL などを使わずに C/C++ で Windows アプリケーションを作るためのノウハウとその議論
  ・ Windows API の不可解な仕様・動作・規則・不具合の報告とその議論
  ・ C/C++ による Windows Programming のパターン、イディオム等
などといった題材を持ち出すしかない。
なお、スレタイは Windows Programing for C/C++(Not MFC) では恥ずかしすぎるので変えた方が良い。
984983:03/04/08 16:41
つまり、噛み砕いて言えば、
質問スレと議論スレに分けろと言う事だ。
別にAPI質問箱で「俺はこうしてるけどみんなはどう?」と問い掛けてもいいと思うんだがなぁ。
質問箱だからって質問しか受け付けないわけじゃなかろうに。
>>1-983
ココ、初めて見たけど、他のスレと「かぶってる」・「かぶってない」は
人それぞれで意見が違うみたいだね。
ある人は「XXXについて語り合おうや」と言えば、ある人は「それは
ZZZスレでどうぞ」みたいな…。
でも、当然ほとんどの人は、ム板のスレ一覧は見てる訳だから、
なんらかしらの理由で、他のスレじゃ趣旨が違うと思ったんだろう。
とりあえず、そういう人が少しでもいる以上、このようなスレがある事は
意義があるのでは?

とりあえず、「このスレいらない派」は消えてもらって、「次スレの
趣旨と方向性」について語らんか?「いる」「いらない」は、それこそ
無意味な話題だと思うので。
987983:03/04/08 16:53
向こうをどのように利用しても良いけどこっちは質問を受けない

これで
次スレ立てるなら初心者が間違って来ないようなタイトルにしてくれな。
ここみたいにスレ違いなレスで埋まってるのに
「1000レス埋まったのでこのスレはやっぱり需要があった!」
みたいな勘違いしちゃうから。
989983:03/04/08 16:55
趣旨と方向性が定まってないなら「いらない」にたどり着く事は自明。

さて、俺の書き込みを呼んだかどうかが怪しいところだ。
「標準C++だけでWindowsプログラミングするためのノウハウ」
「Windowsプログラミングに関する議論スレ(質問お断り)」
>>986みたいなのが必要かどうか良く考えずに糞スレ立てちゃうんだろうな
992983:03/04/08 17:02
下段の括弧書抜きに一票。
>>978で言っているように
「C/C++でのWindowsProgramに関するノウハウ」で良いんじゃない?

テンプレ-----------------------------------------------------------------

C/C++でのWindowsProgramに関するノウハウ

Windowsプログラムを作るにあたってのノウハウや
API の不可解な仕様・動作・規則・不具合の報告や議論、
回避方法等を語りあいましょう。

MFC ATL WTL 等は、それ専用スレがあるので、そちらでお願いします。
あと、APIに関する質問は「Win32API 質問箱」へどうぞ。

関連スレ
http://pc2.2ch.net/test/read.cgi/tech/1047819779/ Win32API 質問箱 Build10
過去スレ
http://pc2.2ch.net/test/read.cgi/tech/1018239290/ Windows Programing for C/C++(Not MFC)



>>993
そのスレタイは危ない。API質問が来る予感。
正直、スレを立てるときは>>1は読まれないと思ったほうがいい。
スレタイ「Windowsプログラミングに関する議論スレ(質問お断り)」
>>993のテンプレでどうだ。
996テンプレ:03/04/08 17:09
C/C++でのWindowsプログラミングに関する議論スレ(質問お断り)

Windowsプログラムを作るにあたってのノウハウや
API の不可解な仕様・動作・規則・不具合の報告や議論、
回避方法等を語りあいましょう。

MFC ATL WTL 等は、それ専用スレがあるので、そちらでお願いします。
あと、APIに関する質問は「Win32API 質問箱」へどうぞ。

関連スレ
http://pc2.2ch.net/test/read.cgi/tech/1047819779/ Win32API 質問箱 Build10
過去スレ
http://pc2.2ch.net/test/read.cgi/tech/1018239290/ Windows Programing for C/C++(Not MFC)

------------------------------
とりあえず、VBとかDelphiは、それ用があるし、このスレもC/C++だったから
「C/C++」を付けてみた。(Ruby厨対策(w)
>>996
それで良いんじゃない?1000取った奴がスレ立ててね。
んー、VCなので「標準C++」と書けないところが歯がゆい。
合戦が始まらないところにこのスレのマイナー感がにじみ出てるな…
10001:03/04/08 17:18
じゃあ、スレ立てます。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。