SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

軽量で高速なハイパーリンクコントロールを実現するC++クラス

Win32 APIとMFCの両方で使えるハイパーリンクコントロールの自作

  • このエントリーをはてなブックマークに追加

本稿では、Win32 APIベースのプログラムとMFCプログラムのどちらでも使える、自作のハイパーリンクコントロールを紹介します。このクラスは、WTLのクラスほど豊富な機能を持たないため、小さくて高速な実行ファイルを作成することができます。

  • このエントリーをはてなブックマークに追加

はじめに

 本稿では、Win32 APIベースのプログラムとMFCプログラムのどちらでも使える、コンパクトで効率的なクラスを紹介します。

 ハイパーリンクコントロールを自作するにあたり、既存のハイパーリンクコントロールをネットでいろいろ探してみましたが、私の求める条件を十分に満たすものは1つもありませんでした。余分な機能が詰め込まれている、バグがある、シンプルだけれども1つか2つ必要な機能が足りない、という具合でした。その中で最も優れていたのが、Neal Stublenのコードでした。とりわけ解決方法のエレガンスさには感銘を受けました。このコードはWin32 APIプログラムでもMFCプログラムでも使えるのです。ただ、残念なことに、バグが1つあるのと、私が求める機能が3つ欠けていました。そこで、Neal Stublenのコードを基にして独自のハイパーリンクコントロールを作成することにしました。本稿では、ハイパーリンクに関してMicrosoftが提供しているオプションについて述べたうえで、Nealが実装した機能と私が追加した機能、それにNealのコードに対するバグ修正とその他いくつかの改善点について説明します。

Microsoftが提供するオプション

 本稿を初めて発表したとき、数名の読者から、その機能ならWTLが提供している、という指摘をいただきました。今振り返ってみると、それでもなお自分でクラスを書いたのは正しい判断だったと思います。WTLが私の解決策よりも優れている点は、内容が充実していてより多くの機能を備えていることです。しかし、WTLを利用する人の目的は小さくて高速な実行ファイルを作成することのはずですから、もし彼らが必要とする機能が私のクラスにすべて含まれているならば、WTLのクラスよりも私のクラスを使った方がメリットがあると思います。実際、私のクラスと比べた場合、WTLの実装には次のような難点があります。

  1. コードの量が多い。
  2. WTLのメッセージディスパッチングスキームを使っている。このスキームは、MFCのものより高速でコンパクトかもしれないが、私のクラスで使用している純粋なWindowsプロシージャほど効率的ではない。
  3. WTLにはツールチップがあるが、このツールチップをカスタマイズしてステータスバーにURLテキストを送信するといった機能を実現することは難しいと思われる(私のクラスでは簡単に実現可能)。
  4. WTLのハイパーリンククラスを使うためには、プロジェクトにWTLが含まれていなければならない。一方、私のクラスはWin32 API C言語プロジェクトやMFC、さらにWTLでも使える。

 私は、WTLを使ってプログラムを書いたことはありませんが、仮にその経験があったとしても、きっと本稿の自作クラスを利用するでしょう。Microsoftは、ハイパーリンクコントロールを求める人々のために、もう1つ選択肢を用意しています。「ComCtrl32.dll」のバージョン6にハイパーリンクコントロールを追加したのです。しかし、このバージョンはWindows XPでしか利用できません。他のWindowsオペレーティングシステムでのみ実行可能なアプリケーションでは、新たに用意されたこの一般的なハイパーリンクコントロールライブラリに頼ることはできませんし、そもそも「ComCtl32.dll」のバージョン6でしか使用できない機能を使うべきではありません。潜在的ユーザ層をWindows XPユーザに限定できる場合は問題ないかもしれませんが、そうでない場合の方が多いはずです。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
私が作成したクラスの機能

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

lano1106(lano1106)

電気通信業界にて組み込みプロトコルスタックなどに携わる。米連邦航空局(FAA)の次世代の洋上航空交通管理(ATM)システム開発では(冗談のようだが)ATMプロトコルを担当。UNIXという歴史の深いテクノロジーを用いる環境に倦怠感を覚え、現在はフリーランスの開発者としてWindowsを対象としたC/C++開発に従事。お問い合わせは本人のWebサイトまで。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/341 2006/04/11 19:14

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング