2017年2月19日 (日)

MFCリボンアプリでいつのまにかリボン上のコントロールが使えなくなっている場合の原因と対処方法

MFC でリボンアプリを作っているといつのまにか配置したボタンなどコントロールが無効になっている場合があります。

Ribbon_redid2_2

Ribbon_redid1_3

これが起きるのは resource.h ファイルの該当するコントロールの ID の数値を変更した場合に発生します。自分なんかは ID の整理は作成中はよく行います(リリース後は行いません)。今までようなツールバー・メニューバーのアプリを作っている場合では問題ありませんでしたが、リボンアプリの場合は事情が異なります。

MFC のリボンアプリでは、リボンリソースは *.mfcribbon-ms ファイルに記述されています。ファイルの中身を見るとリボンは XML で記述されています。

上図の例では resource.h ファイルの ID_WINDOW_MANAGER を変更した場合に発生しています(例では 131 から 13100 に変更しました)。

Ribbon_redid3_2

リボンの定義ファイル( *.mfcribbon-ms )をテキストエディタで ID_WINDOW_MANAGER を探すと下図のようになっており ID が一致しません。

Ribbon_redid4_2

この不一致のためリボンのコントロールが無効となってしまいます。修正方法は簡単で resource.h のリボンに関わる ID を変更したら、*.mfcribbon-ms 内の該当のコントロールの ID も同じ値に変更し、ビルドすると直ります(リビルドしておいたほうがいいかも)。

なぜリソース ID を二重持ちにしているのかが謎です。

2017年1月24日 (火)

Codejock Xtreme ToolkitPro で AppWizard を VisualStudio 2015 に追加する方法

  Xtreme ToolkitPro は MFC の拡張フレームワークです。

  今でこそ VisualStudio が標準でドッキングフレームやリボンをサポートしていますが、標準で実装される前に早くから実装されています。では標準で実装されているからといって必要ないということでもなく、Xtreme ToolkitPro でやったほうがいろいろ便利な場合があります。例えばプロパティグリッドの拡張のし易さがあります。また標準では VARIANT 型を扱うことが多いようで、個人的には VARIANT 型は可能な限り使いたくありません。個人で扱うにはよいのですが、多人数で扱うと VARIANT 型扱いがそれぞれになってしまいロクなことがないからです(体験談)。

  Xtreme ToolkitPro は型指定が決まってるので、個人的にはこっちのほうが好みです。とはいえ標準ではない故に不便なことも多いです。例えばリボンリソースエディタが利用できない点です。正確には使えますが手動でいろいろ手を加えないとなりません。また AppWizard が VisualStudio 2012 までしか用意されていない点です。もしかしたら日本語環境にインストールしたので使えないだけかもしれませんがインストールフォルダを見ても vc110 までのフォルダしかありません。

  そこで VisualStudio 2015 でも Xtreme ToolkitPro の AppWizard を使えるようにします。前置きは長いですが作業はほんの少しです。

  Xtreme ToolkitPro をインストールしたフォルダの AppWizard があるフォルダを開きます。

例) D:\SDK\Xtreme ToolkitPro v17.3.0\Utils\AppWizard

  AppWizard フォルダに vc110 という VisualStudio2012 用のウィザードフォルダがあるので、これをコピーして vc140 にリネームします。リネームした vc140 フォルダ内の vcProjects フォルダに XTPAppWizard.vsz というファイルがあるのでテキストエディタで開きます。

Wizard=VsWizard.VsWizardEngine.10.0

となっている部分を以下のように書き換えます。

Wizard=VsWizard.VsWizardEngine.14.0

  保存したら vcProjects フォルダ内のすべてのファイルを C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcprojects へコピーし、vcWizards フォルダ内の XTPAppWizard フォルダを C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\VCWizards にフォルダごとコピーします。

以上です。

  注意点は XTPAppWizard.vsz の中身を書き換える作業を VisualStudio がインストールされている先では行わないでください。必ず Xtreme ToolkitPro がインストールされているところで行ってください。正確にはマイドキュメントでもどこでも構いませんが、結果として XTPAppWizard.vsz ファイルを編集してからコピーするようにしてください。Windows10 では Program Files 内のファイルを編集しようとすると巻き戻されたりするのでよろしくありません(ウィルス対策ソフトのせいかもしれませんが)。

  これで VisualStudio 2015 で Xtreme ToolkitPro の AppWizard が機能するようになりますが、このウィザードで作成されたプロジェクトをビルドしようとしても C1189 エラーが出ます。サポートバージョンが古く設定されてしまっているので、適当な MFC アプリケーションを作成して、targetver.h ファイルをコピーし、stdafx.h を比べて、WINVER、_WIN32_WINNT、_WIN32_WINDOWS、_WIN32_IE 等がある部分を #include "targetver.h" に変更してください。これでビルドが通るようになります。

  ちなみに AppWizard は古いままなので、標準でリボンアプリを作成することができません。早く対応してほしいところですが、vc110 から変わらないところから期待はしない方がいいでしょう。\Samples\Ribbon をコピーして作業するほかなさそうです。

Appwizard

2016年12月30日 (金)

MFC の DirectX12 プログラミングで d3d12.lib リンクエラー。

これも備忘録。

MFC プログラミングに限った話ではありませんが、VisualStudio2015 から MFC プロジェクトを作成し、DirectX12 のプログラムを書いてビルドしようとすると、

1>LINK : fatal error LNK1104: ファイル 'd3d12.lib' を開くことができません。
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========

と出る場合があります。これは使用する SDK のバージョンが合っていないためです。

これを修正するためにはソリューションエクスプローラで対象のプロジェクトを右クリックし、表示されたポップアップメニューから「SDK バージョンの再ターゲット」を選択します。

2

「SDK バージョンの再ターゲット」が選択されると下図のような SDK 選択ダイアログが表示されるので、Windows10 以降のバージョン(10.0.10240 以降)を指定します。

3_2

OK ボタンを押してプロジェクトをリビルドすればリンクエラーは出なくなるはずです。

2016年12月11日 (日)

VisualStudioの出力ウィンドウでスレッド終了メッセージを表示させない方法

備忘録。すっかり忘れてたので。

VisualStudio の出力ウィンドウを見ていると

「スレッド 0x38e4 はコード 0 (0x0) で終了しました。」

のようなログが出ることがあります。数も多くないので今まであまり気にしていませんでしたが、DirectX12 の D3D12ExecuteIndirect のサンプルを実行すると、数のようにスレッド終了メッセージが大量に出力されて大変なことになってしまいます。

Vsoutput

これではログを追えないので、ウィンドウ内で右クリックするとポップアップメニューが表示され、出力を抑制できる項目が出てくるので必要に応じてチェックボックスを外します。

ここでは「スレッド終了メッセージ」のチェックを外します。

Vsoutput2

その状態でデバッグ実行するとスレッド終了メッセージは表示されなくなります。

Vsoutput3


2016年11月13日 (日)

Ubuntu Mate 16.04.1 PPC を PowerPC 版 mac mini にインストールする

PowerPC 版 mac mini(2005)  に Ubuntu Mate 16.04.1 PPC をインストールします。
Linux はよく分からないですが、無印 Ubuntu 16.04.1 の PowerPC のデスクトップ版が存在せず、Mate にしかなかったので Mate を選択しました。
早速 CD に焼いてそのまま起動するとカーソルが出たところでフリーズしてしまいます。どうやら RADEON 周りのエラーらしいです。
YouTube に Mac で Ubuntu を動かしたという動画があったので、その動画のコメント欄を見ると

boot: live radeon.agpmode=-1 radeon.modeset=1 video=offb:off video=radeonfb:off

とあったので、その通りにしたら起動できました。

CDから起動できたら上部メニューの「System」から「Preferences」→「Hardware」→「Displays」を選んで解像度を設定して扱いやすくしておきます。
ちなみにキーボードとマウスは USB アダプタを付けて使用するものがそのまま利用できました。
キーボード : JETeck 2.4G Wireless Keyboard
マウス : Microsoft Wireless Mobile Mouse 3500

デスクトップの「Install Ubuntu MATE 16.04.1 LTS」アイコンをダブルクリックして Ubuntu を HDD にインストールします。
インストールできたら再起動しますが、linux、CD 起動選択のところで「l」キーを連打してコマンド入力状態にする。1 回だけだと Ubuntu が自動起動してしまうので連打しておくといいです。
このとき普通に起動ししまうと CD からデフォルトで起動したときと同じようにフリーズしてしますので、Ubuntu の起動に以下のコマンドで行います。

boot: Linux radeon.agpmode=-1 radeon.modeset=1 video=offb:off video=radeonfb:off

ログインできたなら再び画面の大きさを調整しておきます。
初回起動がうまくいっても安心せずに yaboot.conf を真っ先に編集します。

> sudo vi /etc/yaboot.conf

で開いて、

radeon.agpmode=-1 radeon.modeset=1 video=offb:off video=radeonfb:off

を "appned" と記述されている部分のところに追記します。2 箇所ありますが old と付いているところは必要ありません。

append="quiet splash radeon.agpmode=-1 radeon.modeset=1 video=offb:off video=radeonfb:off"

これで次に Ubuntu を起動したときにいちいちコマンドを入力なくても済むようになります。修正が終わったら、

> ybin -v

を必ず実行します。これを行わないと反映されないようです。
確認のためもう一度再起動します。今度は何もしないでログイン画面が表示されるまで触りません。
ログインしたところでフリーズしなければ設定成功です。
ただし以下のエラーが出るようになります。

「System program problem detected」

よく分からないのですが、ぐぐってみるとクラッシュレポートが送信されないまま残っているのが原因だそうで、

> sudo rm /var/crash/*

を実行して削除すると出なくなるとあるのですが、この Ubuntu では消えないのでしばらく放置です。




ところでこのインストールした Ubuntsu の IP アドレスは DHCP で割り振られたものなので、ターミナルからアクセスするにはちょっと不便なので固定 IP に変更します。
手順はぐぐって下さい。注意点は多くのサイトでは eth0 になっていますが、16.04 では enP~ となってるので読み替えて下さい。
enP~ は ifconfig で確認できます。
また DNS も interfaces と resolvconf に書いておく必要があります。

最後に反映ですが、

> sudo /etc/init.d/networking restart

では反映されないので、

> sudo reboot

で再起動するしかなさそうです。




ついでにデフォルト Ubuntu のインストールでは SSH が入っていないようなので、

> $sudo apt-get install openssh-server

として SSH をインストールしておきます。これで Windows からターミナルでアクセスできるようになります。

そういえば本当にビックエンディアンかどうか確認しておきます。od コマンドで確認できるらしいので、下記のコマンドを実行します。

> echo -n "12345" | od -t x

出力結果からビックエンディアンだということが確認できました。

Macmini11

2016年11月12日 (土)

ビックエンディアンの PC を求めて

ビックエンディアンとリトルエンディアンの両対応のプログラムを書いてみたくて、ビックエンディアン系の PC が欲しい思ったけど、そんな PC は今どき無い。
PowerPC 系でグラフィック性能があるのは PS3、Xbox 360、Wii があるけど開発環境としては手に入らない。次点として古い Mac になるけど中古で買ってくるには結構高い。
そんな中たまたまアキバのジャンク PC の中に mac mini が数台あり 1 台 2000 円で売ってたので状態のよさげなものを購入。

Macmini01

買ってきてとりあえず分解してみてビックリ・・・。いろいろ抜かれている。iPhoneジャンク品だからね !

Macmini02


とりあえず電源入るか確認しようと、メガネケーブル片手に背面見て思い出した。このころの mac mini は AC アダプタでデカイやつだった。コネクタを見ると特殊形状・・・。

Macmini03


電源入れる前から頓挫。アダプタがどういうものか確認して再びアキバへ。mac 系のジャンクを扱っている店があったはずなので行ってみるとあった ! 1 つだけ残ってた。
即購入しぐるぐる巻きにされていたテープを剥がすと状態がよいものだった。mac との接続部分のカバーが取れそうだったのでマスキングテープで補修。

Macmini04

電源を入れてみる。
ぼ~~ん。
起動音確認 ! 何も入っていないのでフォルダアイコンが中央に出るだけだけど動くのは確認できた。
ただしばらくするとファンが轟音をあげる。あわてて電源切ってファンを確認すると逆向きに取り付けられていた。

向きを直す。

Macmini05


ジャンクでばらすのはいいとして、これぐらいちゃんと戻しておいてよと言いたい。
不安になったのでよく確認するとネジがない。ファンも M/B も 1 本のネジだけで固定されている。
またアキバに行ってネジを多く扱っている西川電子に行って調達。
次にハードディスク。友達がノート PC の HDD を SSD に変更したときに余った HDD を貰ったので取り付けようとしたら IDE だった orz.
またアキバに。80GB の HDD が 5000 円で売ってたので迷わず購入。選択枝ないしね。中古でもあったけど予想以上に新品と 1000 円くらいしか変わらないので新品を購入。

Macmini06

あらためて取り付け用としたら取付部分が破損してる。多分店側がパーツ抜きをする際、ネジ山を潰してしまったので強引にネジごと引っこ抜いたのだろうと思われる。

Macmini07


削ってパテで埋めたけど穴開けが面倒くさくなったので 3 点止めのまま使うことにした。あと Master、Slave の存在をすっかり忘れてたりとあったけどまともな PC に復活したと思う。

費用
Mac mini 本体   : 2,000円
メモリ 1GB        : 1,480円
ネジ                 : 35円
AC アダプタ      : 1,000円
HDD 80GB(IDE) : 5,000円
-----------------------
計                   : 9,515円

次は OS のインストールへ。

2013年9月 2日 (月)

Windows7 で Lync をタスクトレイに入れる方法

Windows Live Messenger は廃止されてしまいましたが、Lync は健在。
Lync 2013 も Messenger 同様にデフォルトではアイコン化した状態でもタスクバーに表示されたままになる。

Lync 2013 の場合は、設定のオプションに「タスクバーではなく通知領域に最小化する」の項目があるので、そのチェックボックスを On にしてあげればよい。

「Windows7 または Windows8 で Windows Live Messenger をタスクトレイに入れる方法」と同様にしてしまうと、Office のインストーラが起動してしまい構成情報の設定を始めてしまい、Office を再起動してくださいのメッセージが表示され、ダイアログを閉じると Lync 2013 も終了してしまう。これは Lync 2013 を起動する度に行われてしまうので、この方法は使えないので注意する(設定であるので使う理由がない)。

2013年6月23日 (日)

Intel M/B で BIOS 更新ができないときのメモ

一年以上ぶり更新。

もう Intel はデスクトップ向け M/B を作らなくなるらしいので、書く意味があるのか分からないけど、最近の Intel の M/B は BIOS が更新できない場合があるので、その場合の BIOS 更新ができないときのメモ。

本当にアップデートできないか ?

起動画面に BIOS セットアップ( F2 キー )の他に BIOS Update( F7 キー )があるので、まずはそれで Update してみる。

キーボードのみ程度の最小構成にして、FAT フォーマットした USB メモリに *.BIO ファイルのみ入れる。
USB 起動できるポートに USB メモリを刺して、ジャンパ取って起動させる。

メッセージに従って USB メモリを指定してアップデート。
アップデートが終わったら、電源切りジャンパをノーマルに戻して BIOS が更新されていることを確認する。
(チェックモードのジャンパにし BIOS の更新をチェックしてからノーマルに戻した方がいいかも)

参考サイト。
http://www.intel.com/support/motherboards/desktop/sb/cs-023360.htm

2012年4月 4日 (水)

Japanist2003 64bit 版インストール時のトラブル対策

1 年ぶりの更新・・・。

Japanist2003 は MS-IME なんかとは比べ物にならないほど(個人的体感比)使いやすい IME である。

ただ残念なのは富士通はソフトウェアにはあまり力を入れない企業なので、今頃になってやっと 64 bit 対応した。さらに 2003 というナンバリングから分かるように 9 年前のソフトであるので辞書が古い。追加辞書は出てるけど自動アップデートとかはしてくれない。

それを差し引いても使いやすさのために Japanist2003 を使い続けている。辞書というか学習機能があるので正直なところ辞書の更新はあまり重要ではないと思う。

さて 64 bit 版が出たのはいいけど、インストールで問題が発生する場合がある。自分は 64 bit 版の体験版という名のβ版を使っていたわけだけど、体験期間が終了すると同時に 64 bit 版が正式にリリースされて、いざインストールという時に問題が発生した。最近になって同様のトラブルを抱えた人がいるようなので書いてみることにする。

インストールするときに 64bit 版の体験版をアンインストールしなければならないのだが、その肝心のアンイストール自体ができないという問題。具体的には以下のようなメッセージが表示される。

Japanist

これは Japanist2003 をインストールするときに標準で使用するという内容のチェックボックスを on にしたときに発生するものと思われる。一番確実に確認しやすいのはログイン画面で左上に Japanist2003 のアイコンが表示されている場合に発生する。

これを解除しなければならない。方法はいくつかあるかもしれないが自分には以下の方法しか分からなかった。

  1. レジストリエディタを起動する。
  2. HKEY_USERS.DEFAULT Keybord LayoutPreload を開く。

    Japanist_2
  3. 右側の項目で 1 とか 2 とかになってる部分を右クリックしてポップアップメニューから「名前の変更」を選択する。
  4. 数値を変更する「1;」とかにしておく。
  5. レジストリーエディタを閉じる。
  6. 再起動する。

再起動して、Windows7 のログイン画面になると右上のあった Japanist2003 のアイコンが EN になっているはずである。こうなっていれば Japanist2003 は起動していないのでアンインストールすることができる。多分下図のようなダイアログが表示されるだろうけど、通常のアンインストール作業なので、指示通り行えば問題ない。

Japanist_3

あとは、Japanist2003 の 32bit 版をインストールし、富士通のサイトから 64bit 版のアップデータを落としてきてインストールしてあげればよい。

よい Japanist2003 ライフを !!

2011年4月12日 (火)

ExtFloodFill メモ

ExtFloodFill 関数を FLOODFILLSURFACE で使用するとき、第 4 パラメータの色は塗り潰し対象の色。

( nXStart, nYStart )の色が第 4 パラメータの色でなければ塗り潰しの処理が行われない。

関数の戻り値も FALSE で返ってくる。ただし GetLastError は正常終了を示す。

2010年12月 8日 (水)

VisualStudio と MFC

どうにも、ここ 2、3 週間体調が良くない。睡眠をもっと多めに取れば大丈夫かな。

で、本題。自分の中では MFC は現役。本当ならば C# に移行したいところだけど、仕事内容が組み込み系と同じ部類になるので C++ からは離れられない。そうなると UI 付きツールを作成するためには MFC が必要になる。

UI は .net 系ほど多くはないので大変だけれども、VisualStudio2008 の ServicePack あたりから豊富な UI 群が追加された。統合系ツール作るのには非常に助かる。

ただ困ったことにドキュメントビューアーキテクチャを使用することを前提にされたウィザード設定が多く、特にリボンを使いたいときなんかはドキュメントビューアーキテクチャは必須になってしまっている。

個人的にはドキュメントビューアーキテクチャは見づらいのと、データ管理は独自に分離して管理できているので必要がない。なのでドキュメントビューアーキテクチャを切り離せた設定ができないと非常に困る。

VisualStudio に追加された UI 群は BCG という会社ところの簡易版の OEM のようである。ここのライブラリは昔ちょっと触ったことがあるが、あまり使いやすいとは思えなかった印象がある。ただ以前とは自分の考え方も変わっているので、今使うと使いやすかったりするのかもしれない。今自分はどうしているかというと別の UI 群(有料)を使っている。ドキュメントビューアーキテクチャも切り離せて使えるのが便利なので愛用している。ただメンテナンスを考えると無料で追加された同じような UI 群は非常にコストパフォーマンスはいい。

ただ個人的には有料でも使いやすいライブラリがあって、かつユーザーにも有益ならば、今自分が使っているライブラリの価格などは無料に等しいと思っている。さてこれを周りに説明して納得してくれる人がと゜れくらいいるだろうか。

2010年11月10日 (水)

ヾ(*´ω`*)ノ

Su470

Su471

2010年10月 7日 (木)

VHS デッキ買った・・・。

別にブルーレイデッキと間違えたわけじゃないんだからネ !

Macrossf_vhs

別々の日に頼んだのに、同じ日に届くことはないじゃないか(笑) 。マクロス F はお盆に注文したんだよ !

先日書いた通り、長年使ってなく、突然壊れた VHS デッキの後継として買った。というのも DVD や BD で出る予定のないものをキャプするためであるし、今は亡き親父の映っているテープもあるので、それを是非キャプしておきたい。

しかし、VHS デッキと同じ日に頼んだアナログキャプチャの機器はいつ届くのだろうか・・・。かれこれ 10 日が経過している・・・。

2010年10月 4日 (月)

Hyper-V 上の Windows Meida Player でコンテンツ共有

  Hyper-V + WindowsServer2003 + TVersity 1.9 で管理している動画を PS3 で再生してみる実験は結局うまくいかなかった。PS3 側でどうしても 5 秒くらい再生しては止まるの繰り返しは解消されなかった。

  ということで実験は終えることにして、今度は Hyper-V + Windows7 + Windows Media Player 12 でコンテンツ共有したものを PC、xbox360、PS3 で再生してみる実験をしてみることにした。

  Hyper-V 上で Windows7 が動作しているという点を除けばパソコンで Windows Media Player でコンテンツ共有しているのとなんら変わりはない。設定等は他の方が書いてくれているので省略。

  早速、メインの Windows7 PC の Windows Media Player を起動してみると、Hyper-V 上の Windows Media Player の情報が確認できる。開いて気がついたのだが、TVersity で管理していたときは、フォルダ構成は全部無視された状態で表示されていたのに、Windows Media Player をサーバとしたこの実験ではちゃんとフォルダ構成を維持している。どうやら TVersity とは相性が悪かったようだ。

  では肝心の動画再生をしてみる。クライアントの Windows7 PC からはなんら問題もなく再生された。
  問題の PS3 ではどうかというと、これも問題なく再生された。このことから TVersity で管理された動画を PS3 でうまく再生されなかったのは、TVersity の設定の問題と思われる。でも TVersity 自体もあまりいじるところがないので結局どうしてよいかわからなかった。
  さて問題が起きたのが xbox360。音は出るが映像が出ない・・・。Micorosft の製品同士なので最後に接続実験をしたけど、まさか問題が出るとは思っていなかった。SD 動画は再生できるので、単純に xbox360 側が対応していないのだろう。デフォルトでは Windows Meida Player はトラスコしてくれない気がする。ただ設定でデバイス側に合わせて変換するみたいな項目があるのでそのうち試してみよう。デフォルトの設定で xbox360 から再生するには xbox360 の Windows Media Center を立ち上げて、そこからアクセスすることで再生できる。ただし汚い。

  まぁいろいろ実験した見たけど、どれも一長一短でデフォルトでサクっといかないのが厳しいところ。PC 買い換えたりすると忘れちゃうよね。

2010年9月29日 (水)

Outlook2010 をタスクトレイに入れる方法

知り合いに聞かれて「あ~できるよ」と言ったけど、すっかり忘れているのでメモとして書くことにする。

Outlook2010 はデフォルトではタスクバーとタスクトレイ(通知領域)の両方にアイコンが表示されている。

Outlook2007tasktray0

Outlook をメーラーとしても、グループウェアとして扱うにしても、ずっと Outlook で作業し続けているわけではないことが多いので、起動はしてても使わないときはタスクバーに表示されほしくないと思う。必要なときにだけタスクトレイ(通知領域)からクリックして起動してくれればよい。Outlook2010 をタスクトレイに入れる方法は以下の通り。

タスクトレイ(通知領域)の Outlook2010 のアイコンを右クリックする。

Outlook2007tasktray1

すると上図のようにポップアップメニューが表示されるので「最小化時にアイコン化する」のメニューを選択する。

メニューが選択されると下図のようにタスクバーの Outlook2010 は消え、タスクトレイ(通知領域)  のみの表示になる。

Outlook2007tasktray3

Outlook2007tasktray2

2010年9月 4日 (土)

ヽ(´ω`)ノ (*´ω`*) (´・ω・`)

Yky

«ExchangeServer 2010 をインストールしてみた。