<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>Slashcolon /: &#187; C#</title>
	<atom:link href="http://slashcolon.com/wordpress/category/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://slashcolon.com/wordpress</link>
	<description>何かとエラーばかり起こしているプログラム屋の日常</description>
	<lastBuildDate>Sat, 19 Nov 2011 12:32:43 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://slashcolon.com/wordpress/category/c/feed/" />
		<item>
		<title>StyleCop 4.4.0.9日本語化版登場！</title>
		<link>http://slashcolon.com/wordpress/2010/06/27/stylecop-4-4-0-9%e6%97%a5%e6%9c%ac%e8%aa%9e%e5%8c%96%e7%89%88%e7%99%bb%e5%a0%b4%ef%bc%81/</link>
		<comments>http://slashcolon.com/wordpress/2010/06/27/stylecop-4-4-0-9%e6%97%a5%e6%9c%ac%e8%aa%9e%e5%8c%96%e7%89%88%e7%99%bb%e5%a0%b4%ef%bc%81/#comments</comments>
		<pubDate>Sat, 26 Jun 2010 22:52:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[お仕事]]></category>
		<category><![CDATA[アドオン]]></category>
		<category><![CDATA[ソフトウェア]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[開発環境]]></category>

		<guid isPermaLink="false">http://slashcolon.com/wordpress/?p=2569</guid>
		<description><![CDATA[『Microsoft StyleCop 4.3（C#静的解析ツール）リリース』のエントリにコメントでStyleCopを日本語化したというお知らせをいただきました。小沢さん、ありがとうございます ダウンロード &#8211 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://slashcolon.com/wordpress/2008/08/20/microsoft-stylecop-43%EF%BC%88c%E9%9D%99%E7%9A%84%E8%A7%A3%E6%9E%90%E3%83%84%E3%83%BC%E3%83%AB%EF%BC%89%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9/">『Microsoft StyleCop 4.3（C#静的解析ツール）リリース』</a>のエントリに<a href="http://slashcolon.com/wordpress/2008/08/20/microsoft-stylecop-43%EF%BC%88c%E9%9D%99%E7%9A%84%E8%A7%A3%E6%9E%90%E3%83%84%E3%83%BC%E3%83%AB%EF%BC%89%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9/#comment-16499">コメント</a>でStyleCopを日本語化したというお知らせをいただきました。小沢さん、ありがとうございます <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ul>
<li><a href="http://sourceforge.jp/projects/oss-ja-jpn/releases/?package_id=11170">ダウンロード &#8211; OSS_Ja_JPN &#8211; StyleCop日本語化</a></li>
<li><a href="http://stylecop.codeplex.com/">StyleCop本家</a></li>
</ul>
<p>連絡をいただいた時にja1-1版を試してみたのですが…どうもうまくインストールされず直接コンタクトしてみるかなぁ <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_question.gif' alt=':?:' class='wp-smiley' />  と思っていたところにja1.2版がリリースされたので試してみたらうまく日本語化されました <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>少し前にStyleCopのソースが公開されていたので、警告メッセージのXMLファイルだけのなんちゃって日本語化をしようと思いながら手つかずだったわたしとしては、非常にウレシイ公開です。</p>
<p>ちなみに、わたしが試した環境はWindows 7 + VS2010 Professional日本語版です。あと、VS2008 Proでも問題なく動作しているようです。</p>
<div class="wp-caption aligncenter" style="width: 545px"><img title="StyleCop output" src="http://slashcolon.com/images/scj1.png" alt="StyleCop日本語化" width="535" height="166" /><p class="wp-caption-text">StyleCop日本語化出力</p></div>
<div class="wp-caption aligncenter" style="width: 548px"><img title="StyleCop warning" src="http://slashcolon.com/images/scj2.png" alt="StyleCop日本語化警告メッセージ" width="538" height="164" /><p class="wp-caption-text">StyleCop日本語化警告メッセージ</p></div>
<p>やはり、日本語で表示されるのは良いですね <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://slashcolon.com/wordpress/2010/06/27/stylecop-4-4-0-9%e6%97%a5%e6%9c%ac%e8%aa%9e%e5%8c%96%e7%89%88%e7%99%bb%e5%a0%b4%ef%bc%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://slashcolon.com/wordpress/2010/06/27/stylecop-4-4-0-9%e6%97%a5%e6%9c%ac%e8%aa%9e%e5%8c%96%e7%89%88%e7%99%bb%e5%a0%b4%ef%bc%81/" />
	</item>
		<item>
		<title>Doxygenコメント書き補助用VSアドイン</title>
		<link>http://slashcolon.com/wordpress/2009/04/20/doxygen%e3%82%b3%e3%83%a1%e3%83%b3%e3%83%88%e6%9b%b8%e3%81%8d%e8%a3%9c%e5%8a%a9%e7%94%a8vs%e3%82%a2%e3%83%89%e3%82%a4%e3%83%b3/</link>
		<comments>http://slashcolon.com/wordpress/2009/04/20/doxygen%e3%82%b3%e3%83%a1%e3%83%b3%e3%83%88%e6%9b%b8%e3%81%8d%e8%a3%9c%e5%8a%a9%e7%94%a8vs%e3%82%a2%e3%83%89%e3%82%a4%e3%83%b3/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 00:08:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[お仕事]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[開発環境]]></category>
		<category><![CDATA[C]]></category>

		<guid isPermaLink="false">http://slashcolon.com/wordpress/?p=2419</guid>
		<description><![CDATA[C#でコメントを書くなら、XML + Sandcastleで決まり。では、C++ならDoxygenでしょう と言うことで、一度作りたいと思っていたVSアドインとしてDoxygenコメントの入力補助が作れないかなぁ～と調べ [...]]]></description>
			<content:encoded><![CDATA[<p>C#でコメントを書くなら、XML + Sandcastleで決まり。では、C++なら<a href="http://www.doxygen.jp/" target="_blank">Doxygen</a>でしょう <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>と言うことで、一度作りたいと思っていたVSアドインとしてDoxygenコメントの入力補助が作れないかなぁ～と調べてみたら…やはり、みなさん同じことを考えるわけですでにありました。</p>
<p>とりあえず2つ見つかったんで、忘れないように自分用メモ。他にもっとあったりして <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ul>
<li><a href="http://sourceforge.net/projects/doxycomment/" target="_blank">SourceForge.net: DoxyComment</a></li>
<p></p>
<li><a href="http://blogs.wankuma.com/ma2/archive/2008/08/23/154040.aspx" target="_blank">makeCommentのご紹介</a></li>
</ul>
<p>で、どちらを使おうかで悩み。さらに、どちらもカスタマイズはできるものの…自分の思い通りにはならないし。</p>
<p>ならば、やっぱりお勉強も兼ねて自作するかを思案中 <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_confused.gif' alt=':?' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://slashcolon.com/wordpress/2009/04/20/doxygen%e3%82%b3%e3%83%a1%e3%83%b3%e3%83%88%e6%9b%b8%e3%81%8d%e8%a3%9c%e5%8a%a9%e7%94%a8vs%e3%82%a2%e3%83%89%e3%82%a4%e3%83%b3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://slashcolon.com/wordpress/2009/04/20/doxygen%e3%82%b3%e3%83%a1%e3%83%b3%e3%83%88%e6%9b%b8%e3%81%8d%e8%a3%9c%e5%8a%a9%e7%94%a8vs%e3%82%a2%e3%83%89%e3%82%a4%e3%83%b3/" />
	</item>
		<item>
		<title>CでGetPrivateProfile*を使わずにINIファイルを扱う</title>
		<link>http://slashcolon.com/wordpress/2009/02/27/c%e3%81%a7getprivateprofile%e3%82%92%e4%bd%bf%e3%82%8f%e3%81%9a%e3%81%abini%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e6%89%b1%e3%81%86-2/</link>
		<comments>http://slashcolon.com/wordpress/2009/02/27/c%e3%81%a7getprivateprofile%e3%82%92%e4%bd%bf%e3%82%8f%e3%81%9a%e3%81%abini%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e6%89%b1%e3%81%86-2/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 15:17:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[WindowsCE]]></category>
		<category><![CDATA[お仕事]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[C]]></category>

		<guid isPermaLink="false">http://slashcolon.com/wordpress/?p=2151</guid>
		<description><![CDATA[以前、『Slashcolon /: » C#でGetPrivateProfile*を使わずにINIファイルを扱う』というエントリで超適当なコードを晒したわけですが…今回は、そのC言語版です 要するに客先指定で、C#ではな [...]]]></description>
			<content:encoded><![CDATA[<p>以前、<a href="http://slashcolon.com/wordpress/2008/06/11/c%E3%81%A7getprivateprofile%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%9A%E3%81%ABini%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%89%B1%E3%81%86/">『Slashcolon /: » C#でGetPrivateProfile*を使わずにINIファイルを扱う』</a>というエントリで超適当なコードを晒したわけですが…今回は、そのC言語版です <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>要するに客先指定で、C#ではなくC/C++で書くのが命題なので仕方ない。フラットホームは前回同様WindowsCEなので、GetPrivateProfileStringとかのWinAPIはありません。WindowsCEでもMFCを使うのであれば、AfxGetApp()->GetProfileString(…)とか使えるんですけど…今回はMFCもなし。</p>
<p>最初、<a href="http://www.codeproject.com/" target="_blank">CodeProject</a>辺りで誰か作ってくれてないか検索してみたのですが…見たものは全て内部でGetPrivateProfileStringを使ってました。要するにWinAPIをラップしてC++のクラスとして公開してるものがほとんど <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' /> </p>
<p>残念ながら、WindowsCEじゃ使えないので前回同様に超適当にでっち上げてみた。</p>
<p>今回のは、空白とかも無視しないしINIファイル形式をガチガチに規定してるので使用は運用でカバーできる場合のみ、さらに問題があっても前回のC#版同様自己責任ってことで。もちろん、コメント、バグ報告、改善要望etc.は歓迎します <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define BUFSIZ 512</span>
&nbsp;
TCHAR <span style="color: #339933;">*</span>GetString<span style="color: #009900;">&#40;</span>TCHAR <span style="color: #339933;">*</span>Section<span style="color: #339933;">,</span> TCHAR <span style="color: #339933;">*</span>Key<span style="color: #339933;">,</span> TCHAR <span style="color: #339933;">*</span>Default<span style="color: #339933;">,</span> TCHAR <span style="color: #339933;">*</span>IniFile<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    TCHAR    buffer<span style="color: #009900;">&#91;</span>BUFSIZ<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    TCHAR    token1<span style="color: #009900;">&#91;</span>BUFSIZ<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> token2<span style="color: #009900;">&#91;</span>BUFSIZ<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    TCHAR    section<span style="color: #009900;">&#91;</span>BUFSIZ<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    TCHAR    <span style="color: #339933;">*</span>p<span style="color: #339933;">;</span>
    BOOL      sectionFound <span style="color: #339933;">=</span> FALSE<span style="color: #339933;">;</span>
    FILE        <span style="color: #339933;">*</span>fp<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>fp <span style="color: #339933;">=</span> _tfopen<span style="color: #009900;">&#40;</span>IniFile<span style="color: #339933;">,</span> _T<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span><span style="color: #009900;">&#40;</span>_tcsdup<span style="color: #009900;">&#40;</span>Default<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    _sntprintf<span style="color: #009900;">&#40;</span>section<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>section<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> _T<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;[%s]&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> Section<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>_fgetts<span style="color: #009900;">&#40;</span>buffer<span style="color: #339933;">,</span> BUFSIZ<span style="color: #339933;">,</span> fp<span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>p <span style="color: #339933;">=</span> _tcschr<span style="color: #009900;">&#40;</span>buffer<span style="color: #339933;">,</span> L<span style="color: #ff0000;">'='</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #339933;">*</span>p <span style="color: #339933;">=</span> L<span style="color: #ff0000;">' '</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        _tcscpy<span style="color: #009900;">&#40;</span>token1<span style="color: #339933;">,</span> _T<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        _tcscpy<span style="color: #009900;">&#40;</span>token2<span style="color: #339933;">,</span> _T<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        _stscanf<span style="color: #009900;">&#40;</span>buffer<span style="color: #339933;">,</span> _T<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%s %s&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> token1<span style="color: #339933;">,</span> token2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>_tcscmp<span style="color: #009900;">&#40;</span>token1<span style="color: #339933;">,</span> section<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            sectionFound <span style="color: #339933;">=</span> TRUE<span style="color: #339933;">;</span>    <span style="color: #666666; font-style: italic;">// 指定セクション発見</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>token1 <span style="color: #339933;">==</span> L<span style="color: #ff0000;">'['</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                sectionFound <span style="color: #339933;">=</span> FALSE<span style="color: #339933;">;</span>    <span style="color: #666666; font-style: italic;">// 別セクション発見</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>sectionFound <span style="color: #339933;">==</span> TRUE<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>_tcscmp<span style="color: #009900;">&#40;</span>token1<span style="color: #339933;">,</span> Key<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #666666; font-style: italic;">// 指定セクションの指定キーを発見</span>
                fclose<span style="color: #009900;">&#40;</span>fp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">return</span><span style="color: #009900;">&#40;</span>_tcsdup<span style="color: #009900;">&#40;</span>token2<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    fclose<span style="color: #009900;">&#40;</span>fp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span><span style="color: #009900;">&#40;</span>_tcsdup<span style="color: #009900;">&#40;</span>Default<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> GetInt<span style="color: #009900;">&#40;</span>TCHAR <span style="color: #339933;">*</span>Section<span style="color: #339933;">,</span> TCHAR <span style="color: #339933;">*</span>Key<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> Default<span style="color: #339933;">,</span> TCHAR <span style="color: #339933;">*</span>IniFile<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    TCHAR    <span style="color: #339933;">*</span>p<span style="color: #339933;">;</span>
    TCHAR    <span style="color: #339933;">*</span>endp<span style="color: #339933;">;</span>
    <span style="color: #993333;">long</span>    l<span style="color: #339933;">;</span>
&nbsp;
    p <span style="color: #339933;">=</span> GetString<span style="color: #009900;">&#40;</span>Section<span style="color: #339933;">,</span> Key<span style="color: #339933;">,</span> _T<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> IniFile<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    <span style="color: #666666; font-style: italic;">// 文字列として取得</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>p <span style="color: #339933;">!=</span> NULL <span style="color: #339933;">&amp;&amp;</span> _tcscmp<span style="color: #009900;">&#40;</span>p<span style="color: #339933;">,</span> _T<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// 指定のセクションとキーが見つかった</span>
        l <span style="color: #339933;">=</span> _tcstol<span style="color: #009900;">&#40;</span>p<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>endp<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>endp <span style="color: #339933;">==</span> L<span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            free<span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">return</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span>l<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    <span style="color: #666666; font-style: italic;">// long値をintへ</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    free<span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span><span style="color: #009900;">&#40;</span>Default<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>GetString関数の戻り値領域は_tcsdupで確保されるので、厳密に言えばfreeで解放が必要です。でも、たいていの場合は初期時に読み込んで終了まで保持しておくことが多いと思うので神経質になるほどでもないかと思いますが…。</p>
<p><img src="http://slashcolon.com/wordpress/wp-content/plugins/wp-tegaki/wp-tegaki-img.php?tegaki_id=2151-0&amp;page=1" alt="━超適当な作りだなぁ～" width="256" height="37" /> <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_redface.gif' alt=':oops:' class='wp-smiley' /> </p>
<p>もっと、効率的でスマートな方法があると思うので教えていただければうれしいです。</p>
]]></content:encoded>
			<wfw:commentRss>http://slashcolon.com/wordpress/2009/02/27/c%e3%81%a7getprivateprofile%e3%82%92%e4%bd%bf%e3%82%8f%e3%81%9a%e3%81%abini%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e6%89%b1%e3%81%86-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://slashcolon.com/wordpress/2009/02/27/c%e3%81%a7getprivateprofile%e3%82%92%e4%bd%bf%e3%82%8f%e3%81%9a%e3%81%abini%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e6%89%b1%e3%81%86-2/" />
	</item>
		<item>
		<title>ULONG(const ULONG &amp;)の罠</title>
		<link>http://slashcolon.com/wordpress/2009/02/21/ulongconst-ulong-%e3%81%ae%e7%bd%a0/</link>
		<comments>http://slashcolon.com/wordpress/2009/02/21/ulongconst-ulong-%e3%81%ae%e7%bd%a0/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 08:10:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[お仕事]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[C]]></category>

		<guid isPermaLink="false">http://slashcolon.com/wordpress/?p=2119</guid>
		<description><![CDATA[一緒に仕事している人がハマってた。昨日まで動いていたコードが少し変更したら動かなくなったと…まぁ、この世界じゃよくある話ですよね 言語はVC++、墜ちるところは一見DBアクセスの関数内。まぁ、CやC++はメモリ管理は自己 [...]]]></description>
			<content:encoded><![CDATA[<p>一緒に仕事している人がハマってた。昨日まで動いていたコードが少し変更したら動かなくなったと…まぁ、この世界じゃよくある話ですよね <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>言語はVC++、墜ちるところは一見DBアクセスの関数内。まぁ、CやC++はメモリ管理は自己責任なんで実際に墜ちる場所と原因の場所が異なることが多く原因が見つけにくい時が良くあります。まぁ、今回もそんなケースですかね。</p>
<p>以下のコードは、実際とは異なるわけですが…やりたいことはULONG型の領域をn個確保したいと言うことです。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">ULONG <span style="color: #000040;">*</span>a <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> ULONG<span style="color: #008000;">&#40;</span>n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>1行だけであれば、すぐに変だとわかりますよね～まぁ、考えてみればあたり前なんですが…コンパイルエラーにはなりません <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' />  単にULONGで初期値が10の領域が<span style="font-size: x-large;">1個だけ</span>確保されて、そのアドレスがaに代入されます。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">ULONG <span style="color: #000040;">*</span>a <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> ULONG<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span></pre></div></div>

<p>これなら、n個のULONGの領域が確保されます。()と[]で大違いですね～まぁ、実際のコードはもう少し入り組んでるので、この間違いを探すのに結構な時間を要してしまいました…二人がかりで <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_redface.gif' alt=':oops:' class='wp-smiley' /> </p>
<p>しかし、ULONGって以下のように定義されてるだけのはずなのにVSでインテリセンスが働くのが不思議なんですよね <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_rolleyes.gif' alt=':roll:' class='wp-smiley' />  理由がわかる人は教えてください。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">typedef</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> ULONG<span style="color: #008080;">;</span></pre></div></div>

<p>以下のような感じで…でも、newを前に置くと効かないんですけどね。</p>
<p><img src="http://slashcolon.com/images/ulong.jpg" alt="ULONG" width="367" height="107" /></p>
<p>で、わたしが今まで同様の罠に引っかからなかった理由を考えてみました。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">ULONG <span style="color: #000040;">*</span>a <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>ULONG <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span><span style="color: #0000dd;">malloc</span><span style="color: #008000;">&#40;</span>n <span style="color: #000040;">*</span> <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>ULONG<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>まったく、C++風じゃないんですけど…mallocで確保してましたとさ。わたしの場合newはインスタンスを作るものってイメージが強いので、基本型の領域を確保したい場合はmallocの方が好きなんですけどどうなんでしょうね。</p>
<p>VC++だとnewでメモリ領域が足りなかった場合try…catchしてないとデフォルトのメッセージボックスが表示されちゃうんですよね（Releaseモードの場合）～かと言って、newに例外書くのも気持ち悪いし…まぁ、mallocでもNULLチェックしなくちゃいけないので同じと言えば同じなんですけど。</p>
<table border="0" cellpadding="5">
<tr>
<td valign="top"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4891005769/maqmakmac07-22/" target="_top"><img src="http://ecx.images-amazon.com/images/I/51VXItYumWL._SL160_.jpg" border="0" alt="ひと目でわかるMicrosoft Visual C++ 2008 アプリケーション開発入門 (マイクロソフト公式解説書)" /></a></td>
<td valign="top"><font size="-1"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4891005769/maqmakmac07-22/" target="_top">ひと目でわかるMicrosoft Visual C++ 2008 アプリケーション開発入門 (マイクロソフト公式解説書)</a><br />増田 智明</p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4891005823/maqmakmac07-22/" target="_top"><img src="http://images.amazon.com/images/P/4891005823.09._SCTHUMBZZZ_.jpg" border="0" alt="プログラムを作ろう！ Microsoft Visual C++ 2008 Express Edition 入門 (マイクロソフト公式解説書)" /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798019445/maqmakmac07-22/" target="_top"><img src="http://images.amazon.com/images/P/4798019445.09._SCTHUMBZZZ_.jpg" border="0" alt="これからはじめるVisual C++2008―Visual C++2008 Express Edition対応" /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4891005750/maqmakmac07-22/" target="_top"><img src="http://images.amazon.com/images/P/4891005750.09._SCTHUMBZZZ_.jpg" border="0" alt="ひと目でわかるMicrosoft Visual Basic 2008 アプリケーション開発入門 (マイクロソフト公式解説書)" /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4891005777/maqmakmac07-22/" target="_top"><img src="http://images.amazon.com/images/P/4891005777.09._SCTHUMBZZZ_.jpg" border="0" alt="ひと目でわかるMicrosoft Visual C# 2008 アプリケーション開発入門 (マイクロソフト公式解説書)" /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/B0011410RG/maqmakmac07-22/" target="_top"><img src="http://images.amazon.com/images/P/B0011410RG.09._SCTHUMBZZZ_.jpg" border="0" alt="Visual Studio 2008 Standard Edition" /></a> </font><font size="-2"><br />by <a href="http://www.goodpic.com/mt/aws/index.html" >G-Tools</a></font></td>
</tr>
</table>
<p>あ、typedefにミソがあるのかぁコレ <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_idea.gif' alt=':idea:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://slashcolon.com/wordpress/2009/02/21/ulongconst-ulong-%e3%81%ae%e7%bd%a0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://slashcolon.com/wordpress/2009/02/21/ulongconst-ulong-%e3%81%ae%e7%bd%a0/" />
	</item>
		<item>
		<title>ErrorProviderの自分メモ</title>
		<link>http://slashcolon.com/wordpress/2009/02/19/errorprovider%e3%81%ae%e8%87%aa%e5%88%86%e3%83%a1%e3%83%a2/</link>
		<comments>http://slashcolon.com/wordpress/2009/02/19/errorprovider%e3%81%ae%e8%87%aa%e5%88%86%e3%83%a1%e3%83%a2/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 03:09:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[VB]]></category>
		<category><![CDATA[お仕事]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://slashcolon.com/wordpress/?p=2114</guid>
		<description><![CDATA[.NET Frameworkの流儀に従うならば、バリデーションチェックはErrorProviderクラス(System.Windows.Forms)を使うのが粋ってものらしい。 ならば一度使ってみるかと思い初体験してみた [...]]]></description>
			<content:encoded><![CDATA[<p>.NET Frameworkの流儀に従うならば、バリデーションチェックは<a href="http://msdn.microsoft.com/ja-jp/library/system.windows.forms.errorprovider%28VS.80%29.aspx" target="_blank">ErrorProviderクラス(System.Windows.Forms)</a>を使うのが粋ってものらしい。</p>
<p>ならば一度使ってみるかと思い初体験してみた <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  え、今まで何で使ってないんだって…C#でバリデーションの必要なUI作るの初めてだし、Compact Frameworkにはないしね～と言い訳 <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>デモプログラムなんで、入力は一箇所だし非常に簡単なので以下のあたりを参考に適当に実装してみた。</p>
<ul>
<li><a href="http://uchukamen.com/Programming1/Validation/" target="_blank">入力のバリデーション（入力審査） &#8211; 宇宙仮面のC# プログラミング</a></li>
</ul>
<p>ほぉ、簡単にできるなぁ～入力異常時に表示されるデフォルトのアイコンがちょっとウザイけど…まぁ、こんなもんだろうと。</p>
<p>ところが…エラーがある状態だとウィンドウクローズでプログラムの終了ができない罠 <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_eek.gif' alt=':shock:' class='wp-smiley' /> </p>
<p>フォームのAutoValidateプロパティがデフォルトでEnablePreventFocusChangeになっているためのようです。かと言って、他のに変えるのも面倒だし…と言うことで検索。</p>
<p>おぉ、すごいちゃんとカスタムコントロール化してる人が居るじゃないですかぁ。</p>
<ul>
<li><a href="http://mnow.wankuma.com/cs2005_mnowcontrol1.html" target="_blank">Windows Forms のための検証コントロール &#8211; えムナウのプログラミングのページ</a></li>
</ul>
<p>ちょっとソースを拝見…ここまでのものは今は要らないけどテストプログラムも付いてるので動きを見るのに最高です <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' /> </p>
<p>で、少し追ってみると <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_idea.gif' alt=':idea:' class='wp-smiley' />  なるほど、エラーがある状態でもプログラム終了できるようにしたければ…フォームのCloseingイベントでe.Cancelをfalseにしちゃえば良いみたいですね <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<table border="0" cellpadding="5">
<tr>
<td valign="top"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113741/maqmakmac07-22/" target="_top"><img src="http://ecx.images-amazon.com/images/I/51De4RNsYzL._SL160_.jpg" border="0" alt="C#クックブック 第3版" /></a></td>
<td valign="top"><font size="-1"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113741/maqmakmac07-22/" target="_top">C#クックブック 第3版</a><br />鈴木 幸敏 </p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4899771975/maqmakmac07-22/" target="_top"><img src="http://images.amazon.com/images/P/4899771975.09._SCTHUMBZZZ_.jpg" border="0" alt="絶対現場主義Visual C#実践講座―開発の現場から生まれた実践テクニック&#038;TIPS集" /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4891006048/maqmakmac07-22/" target="_top"><img src="http://images.amazon.com/images/P/4891006048.09._SCTHUMBZZZ_.jpg" border="0" alt="LINQテクノロジ入門~Microsoft Visual Studio 2008による新たなクエリ構築技法~ (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ) (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ)" /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4891006072/maqmakmac07-22/" target="_top"><img src="http://images.amazon.com/images/P/4891006072.09._SCTHUMBZZZ_.jpg" border="0" alt="Microsoft Silverlight 2テクノロジ入門 (マイクロソフト公式解説書)" /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873110912/maqmakmac07-22/" target="_top"><img src="http://images.amazon.com/images/P/4873110912.09._SCTHUMBZZZ_.jpg" border="0" alt="C#エッセンシャルズ 第2版" /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/489100603X/maqmakmac07-22/" target="_top"><img src="http://images.amazon.com/images/P/489100603X.09._SCTHUMBZZZ_.jpg" border="0" alt="プログラミングMicrosoft ASP.NET 3.5 (マイクロソフト公式解説書 Microsoft Visual Studi)" /></a> </font><font size="-2"><br />by <a href="http://www.goodpic.com/mt/aws/index.html" >G-Tools</a></font></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://slashcolon.com/wordpress/2009/02/19/errorprovider%e3%81%ae%e8%87%aa%e5%88%86%e3%83%a1%e3%83%a2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://slashcolon.com/wordpress/2009/02/19/errorprovider%e3%81%ae%e8%87%aa%e5%88%86%e3%83%a1%e3%83%a2/" />
	</item>
		<item>
		<title>ハンドルされていない例外の捕捉でハマル</title>
		<link>http://slashcolon.com/wordpress/2009/02/15/%e3%83%8f%e3%83%b3%e3%83%89%e3%83%ab%e3%81%95%e3%82%8c%e3%81%a6%e3%81%84%e3%81%aa%e3%81%84%e4%be%8b%e5%a4%96%e3%81%ae%e6%8d%95%e6%8d%89%e3%81%a7%e3%83%8f%e3%83%9e%e3%83%ab/</link>
		<comments>http://slashcolon.com/wordpress/2009/02/15/%e3%83%8f%e3%83%b3%e3%83%89%e3%83%ab%e3%81%95%e3%82%8c%e3%81%a6%e3%81%84%e3%81%aa%e3%81%84%e4%be%8b%e5%a4%96%e3%81%ae%e6%8d%95%e6%8d%89%e3%81%a7%e3%83%8f%e3%83%9e%e3%83%ab/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 15:23:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[お仕事]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[C]]></category>

		<guid isPermaLink="false">http://slashcolon.com/wordpress/?p=2069</guid>
		<description><![CDATA[C#でシリアル通信のプログラムを書いてたわけですが…最近はCOMポートを持っていないマシンが多く、わたしの使ってるマシンも標準ではCOMポートがありません。 そこで、以下のUSB-シリアル変換器を使ってるわけです。COM [...]]]></description>
			<content:encoded><![CDATA[<p>C#でシリアル通信のプログラムを書いてたわけですが…最近はCOMポートを持っていないマシンが多く、わたしの使ってるマシンも標準ではCOMポートがありません。</p>
<p>そこで、以下のUSB-シリアル変換器を使ってるわけです。COM番号etc.の設定もできるしなかなかの優れもの。</p>
<table border="0" cellpadding="5">
<tbody>
<tr>
<td valign="top"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000ANR7T4/maqmakmac07-22/" target="_top"><img src="http://ecx.images-amazon.com/images/I/318R6S19KBL._SL160_.jpg" border="0" alt="B000ANR7T4" /></a></td>
<td valign="top"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000ANR7T4/maqmakmac07-22/" target="_top">REX-USB60F USB-Serial Converter</a><br />
ラトックシステム  2005-06-30</p>
<p>by <a href="http://www.goodpic.com/mt/aws/index.html">G-Tools</a></td>
</tr>
</tbody>
</table>
<p>アプリケーションから見ると普通のCOMポートとなんら変わりなく扱えます。</p>
<p>そこで、ちょっとした出来心が…実行途中でUSB-シリアル変換機を抜いてからアプリケーションを終了すると。COMポートを閉じに行くところで…うぎゃ～system.dllでハンドルしてない例外が飛び出てアプリケーションエラー発生 <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' />  ポートをクローズするところのtry…catchでは捕まえられないんですね <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_eek.gif' alt=':shock:' class='wp-smiley' /> </p>
<p>まぁ、以下にあるMSDNのサンプルでも同じ現象なのでヨシですね（違。</p>
<ul>
<li><a href="http://msdn.microsoft.com/ja-jp/library/cc825644.aspx" target="_blank">.NET Framework 2.0 コア機能解説　～ 第 2 回 シリアルポートのサポート ～</a></li>
</ul>
<p>まぁ、実段階ではCOMポートを装備したマシンを使うので、ポートがなくなるなんて事態はありえないわけですが <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_arrow.gif' alt=':arrow:' class='wp-smiley' /> </p>
<p>でも、アプリケーションエラーがでるのはキモチ悪いので<a href="http://www.atmarkit.co.jp/fdotnet/dotnettips/320appexception/appexception.html" target="_blank">『＠IT：.NET TIPS 適切に処理されなかった例外をキャッチするには？』</a>あたりを参考に捕捉してみました。</p>
<p>確かに捕捉はできたのですが、MessageBoxをわざわざ表示することもないかと思いUnhandledExceptionを握りつぶすだけにすると…。</p>
<p><img src="http://slashcolon.com/wordpress/wp-content/plugins/wp-tegaki/wp-tegaki-img.php?tegaki_id=2069-0&amp;page=1" alt="ぎゃあ～アプリケーションエラー復活" width="457" height="36" /></p>
<p>仕方ないので、さらに検索してみると…</p>
<ul>
<li><a href="http://d.hatena.ne.jp/gsf_zero1/20071112/p1" target="_blank">アプリケーションで未ハンドルの例外を補足する。(Application.ThreadException, AppDomain.UnhandledException) &#8211; いろいろ備忘録日記</a></li>
</ul>
<p>のようにUnhandledExceptionハンドラでEnvironment.Exitを呼び出してる人が結構いるようなので真似してみたら…アプリケーションエラーはでなくなりました <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>どうも、UnhandledExceptionが発生した時の状態にはMessageBoxで止まったり、止まらなかったり数種の状態がある感じがします。</p>
<p><span style="font-size: large;"><strong>なので、UnhandledExceptionのハンドラではMessageBoxとかは使わずにコンソールやログ出力だけして、Environment.Exitを呼び出して終わるのが「吉」っぽいと言うのが結論でした。</strong></span></p>
<p>ちゃんちゃん <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_rolleyes.gif' alt=':roll:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://slashcolon.com/wordpress/2009/02/15/%e3%83%8f%e3%83%b3%e3%83%89%e3%83%ab%e3%81%95%e3%82%8c%e3%81%a6%e3%81%84%e3%81%aa%e3%81%84%e4%be%8b%e5%a4%96%e3%81%ae%e6%8d%95%e6%8d%89%e3%81%a7%e3%83%8f%e3%83%9e%e3%83%ab/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://slashcolon.com/wordpress/2009/02/15/%e3%83%8f%e3%83%b3%e3%83%89%e3%83%ab%e3%81%95%e3%82%8c%e3%81%a6%e3%81%84%e3%81%aa%e3%81%84%e4%be%8b%e5%a4%96%e3%81%ae%e6%8d%95%e6%8d%89%e3%81%a7%e3%83%8f%e3%83%9e%e3%83%ab/" />
	</item>
		<item>
		<title>ALT+Tabチックなプログラムを書く…オナードローCListBox編</title>
		<link>http://slashcolon.com/wordpress/2008/11/18/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e3%82%aa%e3%83%8a%e3%83%bc%e3%83%89%e3%83%ad%e3%83%bcclistbox%e7%b7%a8/</link>
		<comments>http://slashcolon.com/wordpress/2008/11/18/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e3%82%aa%e3%83%8a%e3%83%bc%e3%83%89%e3%83%ad%e3%83%bcclistbox%e7%b7%a8/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 15:02:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[お仕事]]></category>
		<category><![CDATA[ソフトウェア]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[C]]></category>

		<guid isPermaLink="false">http://slashcolon.com/wordpress/?p=1586</guid>
		<description><![CDATA[以下のエントリの一応続編です とりあえず、このエントリでALT+Tabチックなプログラムのメモは終了です。 『Slashcolon /: » ALT+Tabチックなプログラムを書く…切替タスク取得編』 『Slashcol [...]]]></description>
			<content:encoded><![CDATA[<p>以下のエントリの一応続編です <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  とりあえず、このエントリでALT+Tabチックなプログラムのメモは終了です。</p>
<ul>
<li><a href="http://slashcolon.com/wordpress/?p=1562" target="_blank">『Slashcolon /: » ALT+Tabチックなプログラムを書く…切替タスク取得編』</a></li>
</ul>
<ul>
<li><a href="http://slashcolon.com/wordpress/?p=1569">『Slashcolon /: » ALT+Tabチックなプログラムを書く…アイコン取得編』</a></li>
</ul>
<ul>
<li> <a href="http://slashcolon.com/wordpress/?p=1575">『Slashcolon /: » ALT+Tabチックなプログラムを書く…なぜかウィンドウ透明化編』</a></li>
</ul>
<p>切替タスクの名前とアイコンが取得できたので、表示する必要があります。とりあえず、リストボックス(CListBox)で表示することにしましたが…標準のCListBoxでは、アイコンを併せて表示することができません <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' /> </p>
<p>そこで、CodeProjectを検索してでてきたのが<a href="http://www.codeproject.com/KB/combobox/MFC_OwnerDraw_Listbox.aspx?msg=2807363#xx2807363xx" target="_blank">「Graphic and text ownerdraw listbox」</a>です。サンプル画面を見る限り、今回の用途には十分そうです。使うのも簡単ですね。</p>
<p>リストボックス部品を貼って、COwnerDrawListBoxクラスとしてメンバー変数（例えばm_OwnerListBox）を作ってアイテムを設定したいところで以下のような感じで書くだけです <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">m_OwnerListBox.<span style="color: #007788;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;アイテム1&quot;</span>,
               <span style="color: #008080;">::</span><span style="color: #007788;">AfxGetApp</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>LoadIcon<span style="color: #008000;">&#40;</span>ICON_ITEM1<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
m_OwnerListBox.<span style="color: #007788;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;アイテム2&quot;</span>,
               <span style="color: #008080;">::</span><span style="color: #007788;">AfxGetApp</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>LoadIcon<span style="color: #008000;">&#40;</span>ICON_ITEM2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>あとは、アイコンとテキストの位置関係の設定を以下のような感じで。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">m_OwnerListBox.<span style="color: #007788;">SetTextPosition</span><span style="color: #008000;">&#40;</span>COwnerDrawListBox<span style="color: #008080;">::</span><span style="color: #007788;">ITEM_LEFT</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
m_OwnerListBox.<span style="color: #007788;">SetIconPosition</span><span style="color: #008000;">&#40;</span>COwnerDrawListBox<span style="color: #008080;">::</span><span style="color: #007788;">ITEM_RIGHT</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>上記の場合だとテキストが左側にアイコンが右側に表示されます。</p>
<p>そして、リストボックスが不要になった時点で以下のコードでメモリを解放すればOKです。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">m_OwnerDrawListBox.<span style="color: #007788;">Destroy</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>ところが、COwnerDrawListBoxには2つほど問題がありました <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' /> </p>
<ol>
<li>SetTextPositionとSetIconPositionで両方を同じ側にした場合の動作</li>
<li>VS2005で動作させると実行時エラーを起こす</li>
</ol>
<p>1の方は仕様かも知れませんが…アイコンを左側、テキストを右側にしたかったので設定するとテキストが右寄せになってしまいます。わたしは、右寄せは嫌だったので両方左側に指定してみました。すると、テキストとアイコンが左側で重なってしまいました <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_rolleyes.gif' alt=':roll:' class='wp-smiley' />  たぶん、これも仕様なのでしょう。</p>
<p>でも、それ以上の細かな位置制御はなかったので結局…COwnerDrawListBox::DrawItemメソッド中の右寄せをしている以下の部分を変更しました。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">// pDC-&gt;DrawText(pListDataItem-&amp;gt;strItemData,</span>
<span style="color: #666666;">//             strlen(pListDataItem-&amp;gt;strItemData),</span>
<span style="color: #666666;">//             rectText,</span>
<span style="color: #666666;">//             DT_RIGHT | DT_SINGLELINE | DT_VCENTER);</span>
&nbsp;
pDC<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>DrawText<span style="color: #008000;">&#40;</span>pListDataItem<span style="color: #000040;">-</span><span style="color: #000040;">&amp;</span>gt<span style="color: #008080;">;</span>strItemData,
            _tcslen<span style="color: #008000;">&#40;</span>pListDataItem<span style="color: #000040;">-</span><span style="color: #000040;">&amp;</span>gt<span style="color: #008080;">;</span>strItemData<span style="color: #008000;">&#41;</span>,
            rectText,
            DT_SINGLELINE <span style="color: #000040;">|</span> DT_VCENTER<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>ITEM_LEFT, ITEM_RIGHTで面倒な条件を組んでありますね <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_rolleyes.gif' alt=':roll:' class='wp-smiley' />  自分のやりたい位置制御がハッキリしているなら、思い切り書き直した方がよいかも知れません <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_arrow.gif' alt=':arrow:' class='wp-smiley' /> </p>
<p>次に2の方ですが…VS6でデバッグしている時は問題なかった（表面化しなかっただけですが）のですが、透明化の際にVS2005でデバッグ実行するとエラーになり見つかった問題です。同じくCOwnerDrawListBox::DrawItemメソッド中でのCDCクラスの扱いが良くないようです。</p>
<p><a href="http://msdn.microsoft.com/ja-jp/library/kc9hahtd(VS.80).aspx" target="_blank">CListBox::DrawItem (MFC)</a>の例に合わせて以下のように変更しました。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//  CDC* pDC = CDC::FromHandle(lpDrawItemStruct-&gt;hDC);</span>
&nbsp;
    CDC dc<span style="color: #008080;">;</span>
    dc.<span style="color: #007788;">Attach</span><span style="color: #008000;">&#40;</span>lpDrawItemStruct<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>hDC<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    CDC <span style="color: #000040;">*</span>pDC <span style="color: #000080;">=</span> <span style="color: #000040;">&amp;</span>dc<span style="color: #008080;">;</span>
&nbsp;
...
&nbsp;
<span style="color: #666666;">//  pDC-&amp;gt;Detach();</span>
    dc.<span style="color: #007788;">Detach</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>何だか最終的にはCOwnerDrawListBox::DrawItemメソッドを書き直しちゃったので、使う意味はなかったかも知れません。DrawItemメソッドがほとんど全てですし <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' /> </p>
<p>できあがったタスク切替のイメージは以下のような感じです <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p style="text-align: center;"><img src="http://slashcolon.com/images/alttab.jpg" alt="ALTTAB" width="403" height="324" /></p>
]]></content:encoded>
			<wfw:commentRss>http://slashcolon.com/wordpress/2008/11/18/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e3%82%aa%e3%83%8a%e3%83%bc%e3%83%89%e3%83%ad%e3%83%bcclistbox%e7%b7%a8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://slashcolon.com/wordpress/2008/11/18/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e3%82%aa%e3%83%8a%e3%83%bc%e3%83%89%e3%83%ad%e3%83%bcclistbox%e7%b7%a8/" />
	</item>
		<item>
		<title>ALT+Tabチックなプログラムを書く…なぜかウィンドウ透明化編</title>
		<link>http://slashcolon.com/wordpress/2008/11/17/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e3%81%aa%e3%81%9c%e3%81%8b%e3%82%a6%e3%82%a3%e3%83%b3%e3%83%89%e3%82%a6/</link>
		<comments>http://slashcolon.com/wordpress/2008/11/17/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e3%81%aa%e3%81%9c%e3%81%8b%e3%82%a6%e3%82%a3%e3%83%b3%e3%83%89%e3%82%a6/#comments</comments>
		<pubDate>Sun, 16 Nov 2008 15:03:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[お仕事]]></category>
		<category><![CDATA[ソフトウェア]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[C]]></category>

		<guid isPermaLink="false">http://slashcolon.com/wordpress/?p=1575</guid>
		<description><![CDATA[『Slashcolon /: » ALT+Tabチックなプログラムを書く…切替タスク取得編』と『Slashcolon /: » ALT+Tabチックなプログラムを書く…アイコン取得編』の一応続編です アイコンに引き続いて [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://slashcolon.com/wordpress/?p=1562">『Slashcolon /: » ALT+Tabチックなプログラムを書く…切替タスク取得編』</a>と<a href="http://slashcolon.com/wordpress/?p=1569">『Slashcolon /: » ALT+Tabチックなプログラムを書く…アイコン取得編』</a>の一応続編です <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>アイコンに引き続いて、どうでも良い見た目の実装なんですけど…表示するウィンドウというかダイアログの透明化です。実装したことがなかったので、なんとなくやってみたかっただけなんですけど。</p>
<p>透明化って、むちゃくちゃ簡単でWS_EX_LAYERED属性をウィンドウに付けて、SetLayeredWindowAttributesで透明度を設定すればハイ終わりって感じなんですね。</p>
<p><img src="http://slashcolon.com/wordpress/wp-content/plugins/wp-tegaki/wp-tegaki-img.php?tegaki_id=1575-0&amp;page=1" alt="ところが…" width="140" height="32" /><br />
VS6だけだとWS_EX_LAYEREDが定義されてないとか、SetLayeredWindowAttributesがリンクエラーになったりするんですね <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_eek.gif' alt=':shock:' class='wp-smiley' /> </p>
<p>要するにウィンドウの透明化って、Windows 2000からのものなんでPlatform SDKを入れてWINVERを…みたいなことをする必要がある。でも、VS6での開発は客先指定なのでSDKを入れるのはチョットってことでuser32.dllをダイナミックに呼び出すことに。</p>
<p>まぁ、DLLをダイナミックに呼び出す方法は珍しくもなんともないんだけど…ペタっと貼っておく。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">    <span style="color: #666666;">// 本来はSDKで定義されてる値</span>
<span style="color: #339900;">#define LWA_ALPHA 0x00000002</span>
<span style="color: #339900;">#define WS_EX_LAYERED 0x00080000</span>
    <span style="color: #666666;">// 透明化レベル 0～255 0で透明</span>
<span style="color: #339900;">#define ALPHA_LEVEL 200</span>
&nbsp;
   <span style="color: #666666;">// 関数ポインタの型定義</span>
<span style="color: #0000ff;">typedef</span> BOOL <span style="color: #008000;">&#40;</span>WINAPI <span style="color: #000040;">*</span>LPFNSETLAYEREDWINDOWATTRIBUTES<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span>HWND, COLORREF, BYTE, DWORD<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #666666;">// 以下のコードをOnInitDialog辺りに</span>
    LPFNSETLAYEREDWINDOWATTRIBUTES SetLayeredWindowAttributes<span style="color: #008080;">;</span>
&nbsp;
    LONG exStyle <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">GetWindowLong</span><span style="color: #008000;">&#40;</span>this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m_hWnd, GWL_EXSTYLE<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008080;">::</span><span style="color: #007788;">SetWindowLong</span><span style="color: #008000;">&#40;</span>this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m_hWnd, GWL_EXSTYLE, exStyle <span style="color: #000040;">|</span> WS_EX_LAYERED<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    HMODULE hModule <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">LoadLibrary</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;user32.dll&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    SetLayeredWindowAttributes <span style="color: #000080;">=</span>
        <span style="color: #008000;">&#40;</span>LPFNSETLAYEREDWINDOWATTRIBUTES<span style="color: #008000;">&#41;</span><span style="color: #008080;">::</span><span style="color: #007788;">GetProcAddress</span><span style="color: #008000;">&#40;</span>hModule,
            <span style="color: #FF0000;">&quot;SetLayeredWindowAttributes&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    SetLayeredWindowAttributes<span style="color: #008000;">&#40;</span>this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>m_hWnd, <span style="color: #0000ff;">NULL</span>, ALPHA_LEVEL, LWA_ALPHA<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008080;">::</span><span style="color: #007788;">FreeLibrary</span><span style="color: #008000;">&#40;</span>hModule<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>これで、VS6標準で問題なくコンパイルできました <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  あ、モチロンVS2005とかVS2008なら、わざわざこんなことしなくても普通にコンパイルできるんですけど。</p>
<p>そう言えば、Channel 9では<a href="http://channel9.msdn.com/posts/VisualStudio/Visual-CPP-10-10-is-the-new-6/" target="_blank">「Visual C++ 10: 10 is the new 6」</a>というテーマでC++チームのプログラムマネージャーAmit Mohindra氏が語ってます。</p>
<p>30分以上の長丁場ですが…VC++ 10(VS2010)では、簡単にOffice 2007とかで採用されてるリボンインタフェース（評判の良いやつです <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' />  ）が実装できることや、超簡単に自動保存機能が実装できること、さらには<a href="http://www.open-std.org/jtc1/sc22/wg21/" target="_blank">C++0x</a>の一部を取り入れてることなどを語っています。</p>
<p>C#に主役の座を譲りつつあるように見えるけど…まだまだMSはC++もがんばってるよぉ～って感じですね <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<table border="0" cellpadding="5">
<tr>
<td valign="top"><a href="http://www.amazon.co.jp/Programming-Principles-Practice-Using-C/dp/0321543726%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dmaqmakmac07-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321543726" target="_top"><img src="http://ecx.images-amazon.com/images/I/51wP8yqolqL._SL160_.jpg" border="0" alt="Programming: Principles and Practice Using C++" /></a></td>
<td valign="top"><font size="-1"><a href="http://www.amazon.co.jp/Programming-Principles-Practice-Using-C/dp/0321543726%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dmaqmakmac07-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321543726" target="_top">Programming: Principles and Practice Using C++</a><img src='http://www.assoc-amazon.jp/e/ir?t=maqmakmac07-22&#038;l=ur2&#038;o=9' width='1' height='1' border='0' alt='' /><br />Bjarne Stroustrup</p>
<p><iframe scrolling="no" frameborder="0" width="200" height="40" hspace="0" vspace="0" marginheight="0" marginwidth="0" src="http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&#038;SubscriptionId=0G91FPYVW6ZGWBH4Y9G2&#038;AssociateTag=goodpic-22&#038;Operation=ItemLookup&#038;IdType=ASIN&#038;ContentType=text/html&#038;Version=2004-10-04&#038;Page=1&#038;ResponseGroup=Offers&#038;ItemId=0321543726&#038;Style=http://www.g-tools.net/xsl/priceFFFFFF.xsl"></iframe><br /><a href="http://www.amazon.co.jp/Programming-Principles-Practice-Using-C/dp/0321543726%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dmaqmakmac07-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321543726" target="_top">Amazonで詳しく見る</a></font><font size="-2"> by <a href="http://www.goodpic.com/mt/aws/index.html" >G-Tools</a></font></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://slashcolon.com/wordpress/2008/11/17/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e3%81%aa%e3%81%9c%e3%81%8b%e3%82%a6%e3%82%a3%e3%83%b3%e3%83%89%e3%82%a6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://slashcolon.com/wordpress/2008/11/17/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e3%81%aa%e3%81%9c%e3%81%8b%e3%82%a6%e3%82%a3%e3%83%b3%e3%83%89%e3%82%a6/" />
	</item>
		<item>
		<title>ALT+Tabチックなプログラムを書く…アイコン取得編</title>
		<link>http://slashcolon.com/wordpress/2008/11/16/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e3%82%a2%e3%82%a4%e3%82%b3%e3%83%b3%e5%8f%96%e5%be%97%e7%b7%a8/</link>
		<comments>http://slashcolon.com/wordpress/2008/11/16/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e3%82%a2%e3%82%a4%e3%82%b3%e3%83%b3%e5%8f%96%e5%be%97%e7%b7%a8/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 15:02:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[お仕事]]></category>
		<category><![CDATA[ソフトウェア]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[C]]></category>

		<guid isPermaLink="false">http://slashcolon.com/wordpress/?p=1569</guid>
		<description><![CDATA[『Slashcolon /: » ALT+Tabチックなプログラムを書く…切替タスク取得編』の一応続編です。 まぁ、別にアイコンが表示されてなくても良かったんですが…ALT+Tabでも表示されてるし、表示してみるかと ウ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://slashcolon.com/wordpress/?p=1562">『Slashcolon /: » ALT+Tabチックなプログラムを書く…切替タスク取得編』</a>の一応続編です。</p>
<p>まぁ、別にアイコンが表示されてなくても良かったんですが…ALT+Tabでも表示されてるし、表示してみるかと <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>ウィンドウハンドルは前のエントリで取得できてるので、それから取得できるはず。で、調べてみるとSendMessageかGetClassLong辺りで取得できるっぽい。何で2種類あるんでしょうね <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_arrow.gif' alt=':arrow:' class='wp-smiley' /> </p>
<p>とりあえず、SendMessageでアイコンを取得してみました。ありゃ、取れるアプリケーションと取れないアプリケーションがあるよ <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_eek.gif' alt=':shock:' class='wp-smiley' /> </p>
<p>仕方ないので、GetClassLongに変えてみました。う～ん、SendMessageより良い感じ。でも、やっぱり取得できないアプリケーションがある…結局よくわからないので両方の併せ技で取得するようにしましたとさ。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">HICON hicon <span style="color: #000080;">=</span> HICON<span style="color: #008000;">&#40;</span><span style="color: #008080;">::</span><span style="color: #007788;">GetClassLong</span><span style="color: #008000;">&#40;</span>hwnd, GCL_HICONSM<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>hicon <span style="color: #000080;">==</span> <span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    hicon <span style="color: #000080;">=</span> HICON<span style="color: #008000;">&#40;</span><span style="color: #008080;">::</span><span style="color: #007788;">SendMessage</span><span style="color: #008000;">&#40;</span>hwnd, WM_GETICON, TRUE, <span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>hicon <span style="color: #000080;">==</span> <span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        hicon <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">AfxGetApp</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>LoadIcon<span style="color: #008000;">&#40;</span>IDR_DEFAULTICON<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
    <span style="color: #666666;">// ここで、hiconにアイコンが取得できてる</span></pre></div></div>

<p>IDR_DEFAULTICONは、どうしてもアイコンが取得できなかった場合に使うアイコンリソースです。</p>
<p>う～ん、アイコン回りのややこしさも何とかならないものですかね <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_rolleyes.gif' alt=':roll:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://slashcolon.com/wordpress/2008/11/16/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e3%82%a2%e3%82%a4%e3%82%b3%e3%83%b3%e5%8f%96%e5%be%97%e7%b7%a8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://slashcolon.com/wordpress/2008/11/16/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e3%82%a2%e3%82%a4%e3%82%b3%e3%83%b3%e5%8f%96%e5%be%97%e7%b7%a8/" />
	</item>
		<item>
		<title>ALT+Tabチックなプログラムを書く…切替タスク取得編</title>
		<link>http://slashcolon.com/wordpress/2008/11/15/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e5%88%87%e6%9b%bf%e3%82%bf%e3%82%b9%e3%82%af%e5%8f%96%e5%be%97%e7%b7%a8/</link>
		<comments>http://slashcolon.com/wordpress/2008/11/15/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e5%88%87%e6%9b%bf%e3%82%bf%e3%82%b9%e3%82%af%e5%8f%96%e5%be%97%e7%b7%a8/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 08:51:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[お仕事]]></category>
		<category><![CDATA[ソフトウェア]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[C]]></category>

		<guid isPermaLink="false">http://slashcolon.com/wordpress/?p=1562</guid>
		<description><![CDATA[Windowsでタスク切替を行うショートカットキーと言えば、ALT+Tab系でコノ機能を拡張してくれるフリーのプログラムも結構あります。個人的にお薦めは、Alt-Tab Extender &#8211; Joeです でも [...]]]></description>
			<content:encoded><![CDATA[<p>Windowsでタスク切替を行うショートカットキーと言えば、ALT+Tab系でコノ機能を拡張してくれるフリーのプログラムも結構あります。個人的にお薦めは、<a href="http://hp.vector.co.jp/authors/VA031384/software/Joe.html" target="_blank">Alt-Tab Extender &#8211; Joe</a>です <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>でも、今回欲しかったのはWindowsの画面を飛ばしてWindowsCE側でタスク切替操作するのが前提。さらにフリーウェアも入れさせてくれないなどの理由から、ALT+Tabチックなプログラムを自前で実装してほぼ完成したんですが…画面飛ばしの某商用ソフトの機能で何とかなったので、結局陽の目を見ることはなくなっちゃいました <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' /> </p>
<p>いわゆるチョンプロに近いものなんですが…結構面白かったので要点を少しづつ小分けにしてメモ。なお、開発環境はなんでイマドキって感じですが…VC6+MFCです（客先指定ですから） <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_arrow.gif' alt=':arrow:' class='wp-smiley' />  実行環境はXPと2003 Serverです。</p>
<p>とりあえず、タスク切替ですのでタスクを取得できなければお話になりません。なので、とにかくALT+Tabキーを押した時に表示されるのと同じものを取得してみます。</p>
<p>EnumWindowを使って、ウィンドウを列挙してそこから何とか合わし込めば良いだろうと思ったのですが…Google先生に訊いても書いてるページによって、少しづつ条件が異なってたりします。結局以下のような感じで切り替えるタスクのウィンドウをリストアップしました（少なくともXP、2003 Serverでは良さげです）。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">BOOL CALLBACK EnumWindowsProc<span style="color: #008000;">&#40;</span>HWND hwnd, LPARAM lParam<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    HWND parent <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">GetParent</span><span style="color: #008000;">&#40;</span>hwnd<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #666666;">// 親ウィンドウが居るものはリストアップしない</span>
        <span style="color: #666666;">// ただし、親がデスクトップのものはリストアップ対象とする</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>parent <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span> <span style="color: #000040;">&amp;&amp;</span> parent <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">GetDesktopWindow</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">return</span> TRUE<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    DWORD visible <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">GetWindowLong</span><span style="color: #008000;">&#40;</span>hwnd, GWL_STYLE<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span> WS_VISIBLE<span style="color: #008080;">;</span>
    DWORD tool <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">GetWindowLong</span><span style="color: #008000;">&#40;</span>hwnd, GWL_EXSTYLE<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span> WS_EX_TOOLWINDOW<span style="color: #008080;">;</span>
    HWND owned <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">GetWindow</span><span style="color: #008000;">&#40;</span>hwnd, GW_OWNER<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #666666;">// VISIBLE属性のものはリストアップ対象</span>
        <span style="color: #666666;">// TOOLWINDOW属性のものはリストアップ除外</span>
        <span style="color: #666666;">// OWNERウィンドウはリストアップ除外</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>visible <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">||</span> tool <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">||</span> owned <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">return</span> TRUE<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    TCHAR strWindowText<span style="color: #008000;">&#91;</span><span style="color: #0000ff;">BUFSIZ</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
        <span style="color: #666666;">// ウィンドウタイトルの取得に失敗したらリストアップ除外</span>
        <span style="color: #666666;">// ウィンドウタイトルがないものもリストアップ除外</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008080;">::</span><span style="color: #007788;">GetWindowText</span><span style="color: #008000;">&#40;</span>hwnd, strWindowText, <span style="color: #0000ff;">BUFSIZ</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #666666;">// リストアップするウィンドウハンドルなのでhwndを保持する</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> TRUE<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #666666;">// リストアップしたい時にEnumWindowを呼び出す</span>
    EnumWindow<span style="color: #008000;">&#40;</span>EnumWindowsProc, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>とりあえず、上記プログラムの条件でALT+Tabと同じに合わし込むことができました。</p>
<p>ちなみに自分自身はダイアログベースのアプリで、自分自身はリストアップされないようにTOOLWINDOW属性を付けてます。あと、タスクバーにも自身が表示されないようにOnInitDialogメソッドの中に以下のコードも書いてたりします。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">    ModifyStyleEx<span style="color: #008000;">&#40;</span>WS_EX_APPWINDOW, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span></pre></div></div>

<p>しかし、何も条件をつけないでウィンドウを列挙すると何もアプリケーションを起動してない時点で約300個近いウィンドウが列挙されるとは…Windows恐るべし。さすが、Windowsと名乗るだけのことはあります <img src='http://slashcolon.com/wordpress/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' /> </p>
<p>てか、色んなものを引きずって来てるのでWindowsのウィンドウには色んな属性はあるわ、ウィンドウを扱うAPIも混乱するほどあるし、トドメは拡張とか言ってEｘもあるし…ホントつくづく厭になりますね。</p>
]]></content:encoded>
			<wfw:commentRss>http://slashcolon.com/wordpress/2008/11/15/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e5%88%87%e6%9b%bf%e3%82%bf%e3%82%b9%e3%82%af%e5%8f%96%e5%be%97%e7%b7%a8/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://slashcolon.com/wordpress/2008/11/15/alttab%e3%83%81%e3%83%83%e3%82%af%e3%81%aa%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%9b%b8%e3%81%8f%e2%80%a6%e5%88%87%e6%9b%bf%e3%82%bf%e3%82%b9%e3%82%af%e5%8f%96%e5%be%97%e7%b7%a8/" />
	</item>
	</channel>
</rss>

