ウインドウから閉じるボタンをなくすには

OpenCVのウインドウだけでなく、普通にCDialogクラスでウインドウを作ったときでも使える技だと思うのですがメモっておきます。

下のプログラムで色の入ってないところを入力してビルド・実行すると、普通にcvNamedWindow()でレナさんが表示されます。

f:id:tuttitan:20160803233318p:plain

 

~プログラム~

/* ***** ファイルインクルード ***** */
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <windows.h>

/* ***** ライブラリリンク ***** */
#pragma comment(lib, "Debug/opencv_core2412d.lib")
#pragma comment(lib, "Debug/opencv_highgui2412d.lib")

/* ***** 名前空間の解決 ***** */
using namespace cv;

/* 関数定義 */ int main( int argc, char* argv[] ) { // 局所変数宣言 Mat imLena = imread("lena.jpg", -1); // 表示画像 const char* szWindowName = "レナさん"; // ウインドウ名 wchar_t* pwszWndName = NULL; // ウインドウ名(ワイド文字) size_t sizeConv; // 変換された文字数 int iLenStr; // 変換する文字数 LONG lWndStyle; // ウインドウスタイル HWND hWnd; // ウインドウハンドル
// ウインドウの作成 cvNamedWindow(szWindowName, CV_WINDOW_AUTOSIZE); // ウインドウ名の変換 iLenStr = strlen(szWindowName) + 1; pwszWndName = new wchar_t[iLenStr]; setlocale(LC_ALL, "japanese"); mbstowcs_s(&sizeConv, pwszWndName, iLenStr, szWindowName, _TRUNCATE); // ウインドウからボタンを消す hWnd = FindWindow(0, pwszWndName); lWndStyle = GetWindowLong(hWnd, GWL_STYLE); lWndStyle &= ~WS_SYSMENU; SetWindowLong(hWnd, GWL_STYLE, lWndStyle); // 表示 imshow(szWindowName, imLena); cvWaitKey(0); // 解放 cvDestroyWindow(szWindowName); imLena.release();
// 文字列メモリの解放 if (NULL != pwszWndName) { delete[] pwszWndName; pwszWndName = NULL; } return 0; }

 

色の入っている部分を入力してビルド・実行すると、右上にある最小化・最大化・閉じるボタンが消えた状態で表示されます。(青字はワイド文字に関連する箇所赤字がウインドウ設定に関する箇所

f:id:tuttitan:20160803234213p:plain

 

勝手にウインドウを閉じられたら困るようなシーンで使えそうです。