Revision: 8235 https://osdn.net/projects/ttssh2/scm/svn/commits/8235 Author: yasuhide Date: 2019-09-28 03:12:15 +0900 (Sat, 28 Sep 2019) Log Message: ----------- [Tooltip] コンストラクタとCreate()の引数を変更した - TipWinのコンストラクタ引数にインスタンスを取るようにした - Create()の引数に親ウィンドウハンドルを取るようにした - ウィンドウクラス名のサフィックスをインスタンスの値に変更した - RegisterClass()、UnregisterClass()、IsClassRegistered()をprivateにした - WNDCLASSをローカル変数にした Modified Paths: -------------- branches/tootip_classify/teraterm/common/tipwin.cpp branches/tootip_classify/teraterm/common/tipwin.h branches/tootip_classify/teraterm/teraterm/addsetting.cpp branches/tootip_classify/teraterm/teraterm/vtwin.cpp branches/tootip_classify/teraterm/ttpdlg/ttdlg.c -------------- next part -------------- Modified: branches/tootip_classify/teraterm/common/tipwin.cpp =================================================================== --- branches/tootip_classify/teraterm/common/tipwin.cpp 2019-09-27 11:18:53 UTC (rev 8234) +++ branches/tootip_classify/teraterm/common/tipwin.cpp 2019-09-27 18:12:15 UTC (rev 8235) @@ -79,7 +79,7 @@ RECT rect; int px; int py; - TCHAR *class_name; + TCHAR class_name[32]; } TipWin; VOID CTipWin::CalcStrRect(VOID) @@ -192,10 +192,11 @@ return DefWindowProc(hWnd, nMsg, wParam, lParam); } -CTipWin::CTipWin(HWND pHwnd) : pHwnd(pHwnd) +CTipWin::CTipWin(HINSTANCE hInstance): hInstance(hInstance) { tWin = (TipWin *)malloc(sizeof(TipWin)); memset(tWin, 0, sizeof(TipWin)); + *class_name = NULL; } CTipWin::~CTipWin() @@ -206,64 +207,56 @@ if(tWin != NULL) { free((void*)tWin->str); tWin->str = NULL; - free((void*)tWin->class_name); - tWin->class_name = NULL; free(tWin); tWin = NULL; + *class_name = NULL; } } -BOOL CTipWin::IsClassRegistered(HINSTANCE hInstance) +BOOL CTipWin::IsClassRegistered() { - if (tWin->class_name == NULL) { - TCHAR filename[MAX_PATH]; - TCHAR *base_ptr; - size_t base_len; - size_t class_name_len; - GetModuleFileName(hInstance, filename, _countof(filename)); - base_ptr = _tcsrchr(filename, _T('\\')); - base_len = _tcslen(base_ptr); - class_name_len = sizeof(TipWinClassName) + base_len; - tWin->class_name = (TCHAR *)malloc(class_name_len); - _tcscpy(tWin->class_name, TipWinClassName); - _tcscat(tWin->class_name, base_ptr); + if (*class_name == NULL) { + _snprintf_s(class_name, sizeof(class_name), _TRUNCATE, _T("%s_%x"), TipWinClassName, hInstance); } WNDCLASS twc = { 0 }; - return (GetClassInfo(hInstance, (LPCSTR)tWin->class_name, &twc) > 0); + return (GetClassInfo(hInstance, (LPCSTR)class_name, &twc) > 0); } -ATOM CTipWin::RegisterClass(HINSTANCE hInstance) +ATOM CTipWin::RegisterClass() { - if (! IsClassRegistered(hInstance)) { - memset(&wc, 0, sizeof(WNDCLASS)); - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.lpfnWndProc = WndProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = hInstance; - wc.hIcon = NULL; - wc.hCursor = NULL; - wc.hbrBackground = NULL; - wc.lpszMenuName = NULL; - wc.lpszClassName = (LPCSTR)tWin->class_name; - } + WNDCLASS wc; + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = hInstance; + wc.hIcon = NULL; + wc.hCursor = NULL; + wc.hbrBackground = NULL; + wc.lpszMenuName = NULL; + wc.lpszClassName = (LPCSTR)class_name; return ::RegisterClass(&wc); } BOOL CTipWin::UnregisterClass() { - return ::UnregisterClass((LPCSTR)tWin->class_name, wc.hInstance); + return ::UnregisterClass((LPCSTR)class_name, hInstance); } -VOID CTipWin::Create(HINSTANCE hInstance) +VOID CTipWin::Create(HWND pHwnd) { LOGFONTA logfont; const UINT uDpi = GetMonitorDpiFromWindow(pHwnd); - if (! IsClassRegistered(hInstance)) - RegisterClass(hInstance); - if (tWin == NULL) + if(hInstance == NULL) { + hInstance = (HINSTANCE)GetWindowLongPtr(pHwnd, GWLP_HINSTANCE); + } + if (! IsClassRegistered()) { + RegisterClass(); + } + if (tWin == NULL) { return; + } tWin->str_len = 0; tWin->str = (TCHAR*)malloc(sizeof(TCHAR)); memset((void*)tWin->str, 0, sizeof(TCHAR)); @@ -285,7 +278,7 @@ */ tWin->tip_wnd = CreateWindowEx(WS_EX_TOOLWINDOW | WS_EX_TOPMOST, - (LPCSTR)tWin->class_name, + (LPCSTR)class_name, NULL, WS_POPUP, 0, 0, 0, 0, @@ -293,12 +286,6 @@ timerid = 0; } -VOID CTipWin::Create() -{ - const HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(pHwnd, GWLP_HINSTANCE); - Create(hInstance); -} - VOID CTipWin::Destroy() { if(IsExists()) { @@ -377,12 +364,8 @@ TipWin *TipWinCreate(HINSTANCE hInstance, HWND src, int cx, int cy, const TCHAR *str) { - CTipWin* tipwin = new CTipWin(src); - if (hInstance == NULL) { - tipwin->Create(); - } else { - tipwin->Create(hInstance); - } + CTipWin* tipwin = new CTipWin(hInstance); + tipwin->Create(src); tipwin->SetText((TCHAR*)str); tipwin->SetPos(cx, cy); tipwin->SetVisible(TRUE); Modified: branches/tootip_classify/teraterm/common/tipwin.h =================================================================== --- branches/tootip_classify/teraterm/common/tipwin.h 2019-09-27 11:18:53 UTC (rev 8234) +++ branches/tootip_classify/teraterm/common/tipwin.h 2019-09-27 18:12:15 UTC (rev 8235) @@ -60,16 +60,11 @@ class CTipWin { public: - CTipWin(HWND pHwnd); + CTipWin(HINSTANCE hInstance); ~CTipWin(); - ATOM RegisterClass(HINSTANCE hInstance); - BOOL UnregisterClass(); - BOOL IsClassRegistered(HINSTANCE hInstance); - VOID Create(HINSTANCE hinstance); - VOID Create(); + VOID Create(HWND pHwnd); VOID Destroy(); VOID SetText(TCHAR *str); - VOID GetTextWidthHeight(HWND src, const TCHAR *str, int *width, int *height); POINT GetPos(); VOID SetPos(int x, int y); VOID SetHideTimer(int ms); @@ -80,10 +75,13 @@ POINT pts; UINT_PTR timerid; TipWin* tWin; - WNDCLASS wc; - HWND pHwnd; + HINSTANCE hInstance; + TCHAR class_name[32]; static LRESULT CALLBACK WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam); VOID CalcStrRect(VOID); + ATOM RegisterClass(); + BOOL UnregisterClass(); + BOOL IsClassRegistered(); }; #endif -#endif \ No newline at end of file +#endif Modified: branches/tootip_classify/teraterm/teraterm/addsetting.cpp =================================================================== --- branches/tootip_classify/teraterm/teraterm/addsetting.cpp 2019-09-27 11:18:53 UTC (rev 8234) +++ branches/tootip_classify/teraterm/teraterm/addsetting.cpp 2019-09-27 18:12:15 UTC (rev 8235) @@ -635,8 +635,7 @@ _T("Visual"), ts.UILanguageFile); m_psp.pszTitle = _tcsdup(UIMsg); m_psp.dwFlags |= (PSP_USETITLE | PSP_HASHELP); - TipWin = new CTipWin(HVTWin); - TipWin->Create(); + TipWin = new CTipWin(inst); } CVisualPropPageDlg::~CVisualPropPageDlg() @@ -818,6 +817,9 @@ // \x83_\x83C\x83A\x83\x8D\x83O\x82Ƀt\x83H\x81[\x83J\x83X\x82Ă\xE9 ::SetFocus(GetDlgItem(IDC_ALPHA_BLEND_ACTIVE)); + + // \x83c\x81[\x83\x8B\x83`\x83b\x83v\x8D쐬 + TipWin->Create(m_hWnd); } void CVisualPropPageDlg::OnHScroll(UINT nSBCode, UINT nPos, HWND pScrollBar) Modified: branches/tootip_classify/teraterm/teraterm/vtwin.cpp =================================================================== --- branches/tootip_classify/teraterm/teraterm/vtwin.cpp 2019-09-27 11:18:53 UTC (rev 8234) +++ branches/tootip_classify/teraterm/teraterm/vtwin.cpp 2019-09-27 18:12:15 UTC (rev 8235) @@ -805,10 +805,8 @@ DropListCount = 0; // TipWin - TipWin = new CTipWin(HVTWin); - // TipWin\x82\xCCWindow\x83N\x83\x89\x83X\x82̓o\x98^\x82\xCDTera Term\x91S\x91̂\xC51\x93x\x82\xBE\x82\xAF\x8Ds\x82\xA4 - TipWin->RegisterClass(hInstance); - TipWin->Create(); + TipWin = new CTipWin(hInstance); + TipWin->Create(HVTWin); } ///////////////////////////////////////////////////////////////////////////// @@ -817,7 +815,6 @@ CVTWindow::~CVTWindow() { TipWin->Destroy(); - TipWin->UnregisterClass(); delete TipWin; TipWin = NULL; } Modified: branches/tootip_classify/teraterm/ttpdlg/ttdlg.c =================================================================== --- branches/tootip_classify/teraterm/ttpdlg/ttdlg.c 2019-09-27 11:18:53 UTC (rev 8234) +++ branches/tootip_classify/teraterm/ttpdlg/ttdlg.c 2019-09-27 18:12:15 UTC (rev 8235) @@ -1266,7 +1266,7 @@ // \x83c\x81[\x83\x8B\x83`\x83b\x83v\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9 if (g_SerialDlgSpeedTip == NULL) { - g_SerialDlgSpeedTip = TipWinCreate(NULL, hWnd, cx, cy, str); + g_SerialDlgSpeedTip = TipWinCreate(hInst, hWnd, cx, cy, str); TipWinSetHideTimer(g_SerialDlgSpeedTip, tooltip_timeout); } else {