::GetObejct って何だろう?
初心者用のマニュアルを見ずにソースを追いかけていたら、
頭になにもつかない、
::GetObejct(m_bitmap, sizeof(DIBSECTION), &ds);
が出てきて、わからなくなった。
初心者用覚書
ActiveXとC++を、いまになって勉強するようになってしまった。
ActiveXを作るためには、C++か.NET(C#など)で作る必要がある。
ローカルファイルにアクセスすることが前提だと、.NETの場合はインターネットではローカルアクセス権限がないのでできない(イントラは権限を下げて可能らしい)。
C++で作る場合は、
ATL(Active Template Library)かMFCのどちらかを使う。
ATLの方が軽量でよくできているので、今はMFCよりもよくつかわれるそうだ。
ただATLにはGUIが含まれていないATLにはボタンなどのツールキットが含まれていないしそれだけでは面倒、マイクロソフトが提供したオープンソースのWTLを使うと扱いが楽になるようだ。
日本語版WTLは、http://www.usefullcode.net/2006/12/04/WTL80_6304_jp01.zip ここから頂ける。
英語版でよければ、http://sourceforge.net/projects/wtl こちらから。
インストールはsetup**.jsというのを実行するのだが、コマンドラインから以下のように実行する。
WSHはよく知らんかったから、これを見つけるのに5分もかかってしまった。ダブルクリックじゃ動かなかった。
cscript setup**.js
というわけで以下のチュートリアルをやりながら、ATL/WTLを勉強中
http://home.att.ne.jp/banana/akatsuki/doc/atlwtl/
RSS広告カットプロキシー
RSSの広告がうざいので広告カットプロキシーを作ってみました。
文字によるパターンマッチングですので広告表示方法が変わったり、逆に広告でないものがカットされることがあったら直して使ってください。
http://solisart.com/rss/?uri=[rssやatomのuri]
とすると、AD: やPR:の入っているアイテムを消すことができると思います。
(上のURLは有効ですが、アクセスが多いと停止するかもしれません。あしからず。)
index.cgi
#!/usr/local/bin/ruby require 'cgi' require 'open-uri' require 'rexml/document' # 以下の2行はxmlスパム防止のFIXですが、導入されていない場合はコメントアウトしてください。 # require 'rubygems' # require 'rexml-expansion-fix' cgi = CGI.new uri = cgi.params['uri'][0] rss = open(uri).read doc = REXML::Document.new(rss) adxpath_list = [] if doc.root.name == 'rss' and doc.root.attribute("version").value == "2.0" doc.elements.each("//rss/channel/item/title") do |element| if element.text["AD:"] or element.text["PR:"] adxpath_list << element.xpath.gsub(/\/title$/, "") end end elsif doc.root.name == 'RDF' doc.elements.each("*/item/title") do |element| if element.text["AD:"] or element.text["PR:"] adxpath_list << element.xpath.gsub(/\/title$/, "") end end else doc.elements.each("//entry/title") do |element| if element.text["AD:"] or element.text["PR:"] adxpath_list << element.xpath.gsub(/\/title$/, "") end end end adxpath_list.reverse.each do |xpath| REXML::XPath.first(doc, xpath).remove end # スタイルシートの指定で、"http"から始まっていないことがあるので output = doc.to_s.sub(/<\?xml-stylesheet[^>]*>/, '') cgi.out( {'type' => 'application/xml'} ) { output }
?uri=を消してシンプルにしたい場合は、サーバー環境にもよりますが、以下のように設定すると
http://solisart.com/rss/[rssやatomのuri] となってシンプルになります。
(全てのRSSでうまくいくわけでないのですが、まだよくわかりません)
DirectoryIndex index.cgi Options +ExecCGI +FollowSymLinks RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*)$ /rss/?uri=$1 AddHandler cgi-script .cgi
大文字・小文字でトラブル
Mercurialでは、大文字と小文字の変更は行わない方がいいみたいです。
license.txtをLicense.txtと変更してコミットすると、両方のファイルがレポジトリに残ります。
次にclone, pull, updateなどをしようとすると、エラーが出てしまうことがあります。そうすると、他の人とレポジトリを共有できなくなります。
これを解消する方法は、該当のファイルを消し(hg remove)て、コミットすること。するとレポジトリから該当のファイルが削除されます。
ALTキーとダイアログでのイベントが拾えなかったとき
フォームでALT+Aのキーを聞かせる場合は、
modalform あるいはmodelessformで開くのがいいみたい。あとはキャプションで&Allと&をつけるのは、VB, VCのようにすればいい。
ところが、ListViewでitemchangedのイベントが拾えなくなってしまった。
Formでは自動的にVRComCtlContainerをincludeしているが、Dialogではしていないので、以下の含めば動いた。
include VRComCtlContainer
C#のヒアドキュメントで"はどうやってかくの
C# でヒアドキュメントを書くのは簡単だが、"はどうやって描くのか迷ってしまった。
答えは、""と2回重ねれば"と1つになるようだ。
string x = @" abc"" def "