以前の
2003 : 5 6 7 8 9 10 11 12
2004 : 1 2 3
1月トップ絵などが絡みなかなかまとまった時間がとれず、最後が尻すぼみになってしまいましたが、皆様よいお年を〜。
MSDNには、この関数は、GetWindowLong 関数の改訂版です。32 ビット版 Windows と 64 ビット版 Windows の両方ともと互換性のあるコードを記述するには、GetWindowLongPtr 関数を使ってください。
とあります。しかし、この関数が実際に使えるのは64ビット環境のみで、Win32環境下ではGetWindowLong()のマクロだったりします。激しく語弊があるので何とかして欲しいところです。
復旧方法に追記。またこの問題が発生した場合コードが勝手に保存されてしまうようなので、常にコードファイルを開いておくことをお勧めします。
問題のファイルはForm1.csとします。一度VS.NETを終了→プロジェクトフォルダを開く→Form1.resxを削除→Form1.csを適当な名前でコピー(Form2.cs)→Form2.cs内のForm1.csと競合しているクラス名を適当な名前に変更→Form2.csを既存のファイルとして取り込み→Form2.csをデザイナで開く→作成されるForm2.resxをForm1.resxにリネーム→Form2.csを削除
イメージリストに関しては復旧できないようですが、まぁ復旧できるだけましといったところでしょうか。
このコントロール、OnPaint()を持ってるくせにここの処理はできないのですね。TreeView等のコモンコントロールができないのは別にいですけど、せめて標準コントロールくらいは。(中にエディットなどを持ってるから?)
何をやっていたかというと、HSPにVSのタスク一覧のようなものが欲しいなと思い、TeraPadプラグインとして作っていたのですけど、ComboBoxを弄りたいなと思いまして。まぁツールバーにドロップダウンメニュー置けばいいような気もしているのでいいのですが。ちなみにこのコントロール、スタイルを変更すると配置などに色々と問題が発生するためしないほうが無難です。
アプリ自体は作りこみがだめだめなので今のところ一般公開予定はないです。要望があればしますが、、、
からあずまや。をみると、上ヘッダ部分が重なってしまう問題点があるのですが、解決方法がわからないので絶賛放置中です。Googleにつかまっても結果は下のほうだろうと踏んでいたのですがまさかこんなことになるとは。
ちなみに今日の雑記が多いのは繋いでないときに書いたものがたまってたからだったりします。
HSPセンターの掲示板にクックブックで、プログラムしているんですけど、
という投稿があるのでクックブックのプログラムの改造版だと思われます。憶測(いや、もらったクックブックは封を切ってないので)で投稿するのもどうかと思いますし、今本家に行くとめんどくさそうなのでこちらに。
というか本家の掲示板はプログラム系掲示板としては甘々だと思うのですが、下が小学生からいるのでしかたがないのですかねー。
VS.NETのFormデザイナで編集していると独自コーポネント/コントロールのDllが見つからなかったなどとのたまわれデザインが崩れてしまうことがあります。この場合コードファイルから問題となっている部分のコードが削除されて言うためこのまま保存すると2度と元に戻せなくなってしまいます。このときの復旧方法。
問題のファイルはForm1.csとします。プロジェクトフォルダを開く→Form1.csを適当な名前でコピー(Form2.cs)→Form2.cs内のForm1.csと競合しているクラス名を適当な名前に変更→Form2.csを既存のファイルとして取り込み→Form2.csをデザイナで開く→作成されるForm2.resxをForm1.resxにリネーム→Form2.csを削除
とりあえずこれで読み込めます。Dllのバージョンが怪しい(Side-by-Side周り?)のですが、再現できず。
昨日はネットにつながなかったので1日空いてしまいました。これがきっかけとして書かなくなるのでしょう。そして今日はネタがなかったり。
トップページを微妙に書き換えた効果があったのかBotが来てくれました。そのうち登録されるでしょう、きっと。
依然googleに見つかってないので検索から来た人は(把握している限り)誰も見てなかったりします。(笑)Botは来てるのですがトップページを更新してなかったので中は見ずにお帰りになられました。まぁ無視ちゃってもよいのですがとりあえずびみょ〜にトップページを変えておきました。
というかトップページが更新されてなかったら帰るって頻繁にトップページ更新しないとだめってことですか?あずまや。側はトップページに雑記をおく予定なのでこのあたりの対策としてはよいかな?で、1月より雑記をあずまや。に移したいのですが厳しいかなー。
17 : デフォルトGUIフォント
(メニューやダイアログボックスなどで使われています)
ってありますが、これはおそらく、GetStockObject()のGUIフォントであり、エンドユーザの環境でこれが正しい保障はありません。そもそもメニューフォントとダイアログのフォントは別物です。
では何を使えばよいかというと、Microsoft Document Explorer 7.0を見る限りダイアログのフォントにはシステム設定の「アイコン」フォントを割り当てるようです。ユーザ環境のフォントの取得方法については下記のとおり。
#include "Proj.API.as"
#include "Proj.API/winapi/gdi.as"
#const SPI_GETICONTITLELOGFONT 31
#const SPI_GETNONCLIENTMETRICS 41
#define global SystemParametersInfo \
DeclBasicProc4 hUser, "SystemParametersInfoA",
#define global SelectObject DeclBasicProc2 hgdi, "SelectObject",
#define global DeleteObject DeclBasicProc1 hgdi, "DeleteObject",
#define global CreateFontIndirect \
DeclBasicProc1 hgdi, "CreateFontIndirectA",
mref bm, 67;
alloc nclientMtex, 340;
SystemParametersInfo int_t(SPI_GETICONTITLELOGFONT), int_t(60), var_t(logfont), int_t(0);
gosub *setfont;
mes "アイコン";
nclientMtex = 340;
SystemParametersInfo int_t(SPI_GETNONCLIENTMETRICS), int_t(340), var_t(nclientMtex), int_t(0);
memcpy logfont, nclientMtex, 60, 0, 24 : gosub *setfont;
mes "キャプションバー";
memcpy logfont, nclientMtex, 60, 0, 92 : gosub *setfont;
mes "パレットタイトル";
memcpy logfont, nclientMtex, 60, 0, 160 : gosub *setfont;
mes "メニュー";
memcpy logfont, nclientMtex, 60, 0, 220 : gosub *setfont;
mes "ヒント";
memcpy logfont, nclientMtex, 60, 0, 280 : gosub *setfont;
mes "メッセージボックス";
stop
*setfont
// 以前のフォント削除
DeleteObject handle_t(bm.38);
// LOGFONT を元にフォントを作る
CreateFontIndirect var_t(logfont);
bm.38 = iResult;
// 現在のデバイスコンテストに割り当て
SelectObject handle_t(bm.4), handle_t(bm.38);
memcpy bm, logfont, 60, 712;
return;
フォントのBMSCR構造体への割り当てはとりあえず動いたということで掲載していますがHSPの内部仕様は知らないのでリソースリークなどの問題点が出る可能性があります。不安な場合TextOut()等に置き換えればよいでしょう。
あずまや。側に落とさないといけませんね、、、
β版に報告したほうがよいかな?
CS1591 のエラー表記がおかしいです。
// CS1591.cs
// compile with: /W:4 /doc:x.xml
public class Test {
public static void Main() {}
}
.NET Framework ドキュメントにあるサンプルをコンパイルすると、
warning CS1591: 公開されている型またはメンバ 'Test' の XML コメントがありませんん。 warning CS1591: 公開されている型またはメンバ 'Test.Main()' の XML コメントがありませんん。
な警告が表示されます。(最後に"ん"が1個多い)だからどーしたって話ですが。
まずこのアプリの場合ショート部門応募は絶対条件でした。一般部門ではDllが使えるため「何でもあり」になってしまいます。
みら〜じゅLEはショート部門アプリにありがちだった、局所的な完成度の高さや一発ネタを狙うのではなく、1つのアプリケーションとして実用的であり、かつ平均的な完成度の維持をめざし製作されています。そのため「多重起動の禁止」、「メッセージが来ていない際に停止」、「トレイアイコンの再表示」等見た目にはわからない部分も実装されています。コメントを見る限りこの辺りが評価されたのでしょう。
通知領域への常駐は「見栄え」以外にも実用途として最低限必須だったと考えます。「最小化状態での使用」や「最前面へ配置してボタン操作」も候補してありましたが、操作性および他Windowsアプリケーションとの整合性を損なうため却下しました。結果これとウィンドウ管理のあわせて2基のマシン語コードを使用することになりましたが副作用としてContextMenuが使えたのでよかったともいえます。ただ逆に言えばHSP単体での通知領域常駐はできない(ContextMenuは可能)ということで、この辺りが評価としてあがっているのはHSPコンテストとしてはどうかなとも思います。
次回があればどうしましょう、、、通知領域常駐は使っちゃったので別の「見栄え」的なものを探さないとだめですね。候補としてはDesk Bandsとか?
なこと(何?)をしていてたのでお休みであります。コンテストの賞品が届いたとかネタはあるのですけどね。
もうちょっと弄ってから出そうかと思いましたが時間が取れそうにないので見切り発車。次期版ではメールビューをまじめにウィンドウにするか検討中。というかメモリ食いすぎですね。
class a {
public static void Main() {
System.Windows.Forms.Application.Run(
new System.Windows.Forms.Form() );
}
}
これだけで7Mとか食うのでいた仕方がないのですがもう少し何とかしたいところです。
そんなわけで労力をともわない更新作業、文章をマルチ言語に対応中です。駄文を今年中に移植したいのですが厳しい?
C++は力尽きてHSP版を元に書いただけというなかなか投げやり内容ですが。やる気が出たとき見直します。
.NETドキュメントをまねして言語選択をつけてみました。これにより説明同じでコードだけ違う今回のようなドキュメントのメンテナンス性を高めています。ただこれのせいでコードが読みづらくなってるor表示確認にローカルサーバが動いてないといけないのでこのあたりが今後の課題。後者に関してはクライアントサイドで処理すればよいのですけど私はJavaScriptを切っているので却下の方向で。
知ってるのがAudioEncoderしかないのですが。これも1年位前に使ってみてだめだめだったのでこれなら自作したほうが早い(アプリ自体Dllを呼び出しているだけなので)、と自作したので使ってなかったり。
というかフォントって「オンラインソフト」に入るのですか?だとしたらアイコン集等もエントリーされてよいかと思うのですが。
スクロールバーのドラッグが無効化され常に真下に。
なぜか常に最前面になることがある。WS_EX_TOPMOSTなウィンドウよりもうえに来ることもある。
2に関しては普段コンポネブラウザ使ってるので問題ないですが、1はタブペンで操作しているのでかなり不便。
別件を調べていると発見。PrintWindow()でできました。肝心な調べてることは依然見つかっていないので文章へおとすのはまた今度に。
//
// 9x では WM_PRINT を使用します。
// 2000 以前はサポートしていない模様
//
#include "llmod.as"
mref bm, 67
hwnd = ウィンドウハンドル
pm = hwnd, bm.4, 0
dllproc "PrintWindow", pm, 3, D_USER
mes dllret
redraw
stop
とりあえずUpdateLayerdWindow()をWin32 APIから使う方法を調べる。CreateDibSection()で32bitビットマップをつくり以下略すればできそう。問題はCからだと画像読み込みがめんどくさくHSPからだとCreateDibSection()の扱いがめんどくさいということ。そんなわけでまだ試してないので、実際にできるかどうかわかりません。
GDIに比べGDI+は楽ですが遅い(GDI+のほうがビットマップ転送に限れば10倍くらい早い)のが難点。で、.NETアプリがもたつくのは.NETが原因ではなくGDI+を使って描画している辺りに問題があるのではないかと思う今日この頃。
これで検索ワードを調べて雑記のねたにすることができます。(ぉ)
12/3あたりにBotが来ているのでBotが来てから登録まではしばらく時間があるということなのでしょうね。しかし、「C# ダブルクリック」でトップ2にくるのが激しくなぞなのですが。ほかにもプログラム関連のワードはそれなりに上位に来てますし、、、
# 12/4の時点でアイライトさんのページすらかからなかったのはなぜ?
で、レイヤードウィンドウ関連(UpdateLayeredlayeredWindow)が多いですね。ただ、来た人みんな.NET CLRがインストールされてませんでしたけど。(リファラで検索してきたと判別できる人限定)レイヤードウィンドウはSetLay...ばかりでUpdate...のほうはサンプルが殆どないので需要はあるだろうとは思ってましたがC#だと無意味ですね〜。
相変わらず名前が決まらないので掲示板リリース。一時設定をつけました。ゲームの際などで割り込みを防ぐ用途を想定しています。
ホットキーに対応する予定ではありますが、これつけると設定ダイアログをつける必要が出てくる気がして気分乗らずってところですか。とりあえずコーポネント自体はできたので、あとは組み込むだけなのですけど。
駄文を書き直しているのですが、なかなか進んでなかったり。とりあえずサブクラス化してMDIを作るDllのコードをあげときます。サンプルとして作ったので激しくいい加減です。実用には向きませんが、参考にはなるかと思います。
#include <windows.h>
#define EXPORT __declspec (dllexport)
HWND g_mdiClientWindow;
WNDPROC g_parentProc;
BOOL IsMdiChild( HWND hwnd );
LRESULT CALLBACK SubProc( HWND hwnd,
UINT msg, WPARAM wprm, LPARAM lprm );
EXPORT int WINAPI SetMDIWindow( HWND hwnd, HMENU hMenu,
int p3, int p4 )
{
CLIENTCREATESTRUCT ccsClient;
RECT rc;
g_parentProc = (WNDPROC)GetWindowLong(
hwnd, GWL_WNDPROC );
SetWindowLong( hwnd, GWL_WNDPROC, (LONG_PTR)SubProc );
// MDI クライアント作成
ccsClient.hWindowMenu = hMenu;
ccsClient.idFirstChild = 0x1000;
GetClientRect( hwnd, &rc );
g_mdiClientWindow = CreateWindowEx(
0, TEXT("MDICLIENT"), 0,
WS_CHILD | WS_CLIPCHILDREN
| WS_CLIPSIBLINGS | WS_VISIBLE,
0, 0, rc.right, rc.bottom,
hwnd, (HMENU)0x1000,
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
&ccsClient );
return 0;
}
EXPORT int WINAPI GetMdiClient( HWND *hwnd,
int p2, int p3, int p4 )
{
*hwnd = g_mdiClientWindow;
return 0;
}
LRESULT CALLBACK SubProc( HWND hwnd, UINT msg,
WPARAM wprm, LPARAM lprm )
{
switch( msg ) {
case WM_COMMAND:
if( !IsMdiChild(hwnd) ) {
break;
}
case WM_MENUCHAR:
case WM_SETFOCUS:
case WM_SIZE:
return DefFrameProc(
hwnd, g_mdiClientWindow,
msg, wprm, lprm );
}
return CallWindowProc(
g_parentProc, hwnd, msg, wprm, lprm );
}
BOOL IsMdiChild( HWND hwnd ) {
// 面倒なので常に true
return 1;
}
修羅場ってるのでやめ。
とりあえずかな〜り中途半端なinspectorをFramework掲示板のほうに上げておいて終わり。メールの返信は明日辺りにでも行いますので。
米Googleは最近、インターネット検索の順位を入れ替えた
というわけで検索してみました。
夢幻泡影以外トップページがヒットしません。夏あたり「方位記号」で検索するとトップに来てた気がするのですが、概要ページしかかかってませんね。ていうかあずまや。以下がまったくかからないのは伺かなものかと。
ウィンフィールド氏が話をしたあるWebデザイン会社は、以前は「フリーランス Webデザイナー」で検索したときに、検索結果のかなり上位に表示されていたが、今はまったく表示されなくなっているという。Googleは、プロのテクニックを多用して順位を上げようとするサイトを排除したかったようだとウィンフィールド氏は言う。このWebデザイン会社は、サイトのあちこちで「フリーランス Webデザイン」という言葉を繰り返し使っていた。
と、いうのでどこかだめだったのでしょうね。
ネタがないのでお休みです。それはさておきあずまや。のPHPスクリプトにバグがあるので直さないと、、、
FrameworkページのPHPスクリプトばかり書いていて更新しなかったので、文章のネタがかなりあったり。これの放出と駄文からの移植で今年いっぱいはなんとか。
そんなわけでこのサイトは不定期更新期間に突入です。まぁ今年は昨年とは違い常時接続なので更新自体はできるのですけど。当面は雑記のみでネタがあるとあずまや。の文章を更新予定です。位置付け的には覚書なので何か作ってる以上ネタに困ることはないのでそれなりに更新できるか?(聞くな)
Copyright(C)方位記号