こんな警告が出た。
コンパイルしています...
main.cpp
c:\foo\main.cpp(25) : error C2275: 'MyLt' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。
c:\foo\main.cpp(7) : 'MyLt' の宣言を確認してください。
ビルドログは "file://c:\foo\Debug\BuildLog.htm" に保存されました。
foo - エラー 1、警告 0
コンパイルしたのはこれ。
#include <cstdlib> #include <iostream> #include <algorithm> #include <vector> struct MyLt { bool operator () (const int lhs, const int rhs) const { return lhs < rhs; } }; void main (int argc, char **argv) { std::vector <int> IntVector; for (int i = 0; 10 > i; i++) IntVector.push_back (std::rand ()); std::cout << "before sort" << std::endl; for (int i = 0; IntVector.size () > i; i++) std::cout << IntVector [i] << ", "; std::cout << std::endl; std::sort (IntVector.begin (), IntVector.end (), MyLt); // error C2275 std::cout << "after sort" << std::endl; for (int i = 0; IntVector.size () > i; i++) std::cout << IntVector [i] << ", "; std::cout << std::endl; return; }
ハァ? typedef ? メンバアクセス演算子? どちらも使ってないよ。はっきり言ってこのエラーメッセージは意味不明。
アイコン型のウインドウを作成したかったのです。それには、アイコンのマスク部分を取得して、マスクの不透明部分の形のウインドウリージョンを作って設定します。
リージョン作成部分は続きの方にかいときますが、ウインドウプロシージャはこんな感じ。
LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_PAINT:
PAINTSTRUCT PaintStruct;
HDC hDC = BeginPaint (hWnd, &PaintStruct);
DrawIcon (hDC, 0, 0, m_hIcon);
EndPaint (hWnd, &PaintStruct);
break;
case WM_MOVE:
SetWindowRgn (hWnd, m_hRgn, TRUE);
break;
default:
break;
}
return DefWindowProc (hWnd, uMsg, wParam, lParam);
}
説明が前後しますが、ウインドウ作成時にウインドウに描画するアイコンを m_hIcon 仁読み込んであります。同時に、そのアイコンハンドルを渡して後述の CreateRgnFromIcon (HICON) を呼びだし、m_hRgn にアイコンのマスク部分の形のリージョンを得てあります。では、その CreateRgnFromIcon 関数です。
タイトルバーのないウインドウを、ウインドウ内の任意の位置をドラッグして移動できるようにする方法です。
以下のように、WM_LBUTTONDOWN メッセージをすり替えて、タイトルバー上でマウスボタンが押下されたようにだましてしまうとうまくいきます。
LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_LBUTTONDOWN:
ReleaseCapture ();
SendMessage (hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
return 0;
default:
break;
}
return DefWindowProc (hWnd, uMsg, wParam, lParam);
}
親戚よりヘルプコール。「ワードアートにいくら塗りつぶしの色を設定しても透明のまま」とのこと。???と思って行ってみると、ワードアートだけでなく、Word のすべての図形で塗りつぶしの色が表示されない。それらしい設定項目を探してもない。
結論を言うと、コントロールパネルの「ユーザー補助のオプション」→「画面」タブ→「ハイコントラストを使う」にチェックが入っていた。そんなの入れた覚えがないって言うけど、まあとにかく、そのチェックをはずせば元通りになりました。
でも、そんなとこの設定が Word の表示に関係あるなんて思わないよねぇ。