Mercurial > hg > forks > UniversalIndentGUI
view src/UniversalIndentGUI_NPP/NPPCommon/Ccpp/StaticDialog.cpp @ 489:5fe3aefed089
Initial commit of plugin for Notepad++. Had to make some changes to the indenthandler, which need to be put under a ifdef switch. But at first it at least works.
git-svn-id: svn://svn.code.sf.net/p/universalindent/code/trunk@729 59b1889a-e5ac-428c-b0c7-476e01d41282
author | thomas_-_s <thomas_-_s@59b1889a-e5ac-428c-b0c7-476e01d41282> |
---|---|
date | Sun, 15 Jun 2008 17:15:35 +0000 |
parents | |
children | 82cd1efd6015 |
line wrap: on
line source
//this file is part of notepad++ //Copyright (C)2003 Don HO ( donho@altern.org ) // //This program is free software; you can redistribute it and/or //modify it under the terms of the GNU General Public License //as published by the Free Software Foundation; either //version 2 of the License, or (at your option) any later version. // //This program is distributed in the hope that it will be useful, //but WITHOUT ANY WARRANTY; without even the implied warranty of //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //GNU General Public License for more details. // //You should have received a copy of the GNU General Public License //along with this program; if not, write to the Free Software //Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "StaticDialog.h" #include "SysMsg.h" #define WS_EX_LAYOUTRTL 0x00400000L void StaticDialog::goToCenter() { RECT rc; ::GetClientRect(_hParent, &rc); POINT center; center.x = rc.left + (rc.right - rc.left)/2; center.y = rc.top + (rc.bottom - rc.top)/2; ::ClientToScreen(_hParent, ¢er); int x = center.x - (_rc.right - _rc.left)/2; int y = center.y - (_rc.bottom - _rc.top)/2; ::SetWindowPos(_hSelf, HWND_TOP, x, y, _rc.right - _rc.left, _rc.bottom - _rc.top, SWP_SHOWWINDOW); } HGLOBAL StaticDialog::makeRTLResource(int dialogID, DLGTEMPLATE **ppMyDlgTemplate) { // Get Dlg Template resource HRSRC hDialogRC = ::FindResource(_hInst, MAKEINTRESOURCE(dialogID), RT_DIALOG); HGLOBAL hDlgTemplate = ::LoadResource(_hInst, hDialogRC); DLGTEMPLATE *pDlgTemplate = (DLGTEMPLATE *)::LockResource(hDlgTemplate); // Duplicate Dlg Template resource unsigned long sizeDlg = ::SizeofResource(_hInst, hDialogRC); HGLOBAL hMyDlgTemplate = ::GlobalAlloc(GPTR, sizeDlg); *ppMyDlgTemplate = (DLGTEMPLATE *)::GlobalLock(hMyDlgTemplate); ::memcpy(*ppMyDlgTemplate, pDlgTemplate, sizeDlg); DLGTEMPLATEEX *pMyDlgTemplateEx = (DLGTEMPLATEEX *)*ppMyDlgTemplate; if (pMyDlgTemplateEx->signature == 0xFFFF) pMyDlgTemplateEx->exStyle |= WS_EX_LAYOUTRTL; else (*ppMyDlgTemplate)->dwExtendedStyle |= WS_EX_LAYOUTRTL; return hMyDlgTemplate; } void StaticDialog::create(int dialogID, bool isRTL) { if (isRTL) { DLGTEMPLATE *pMyDlgTemplate = NULL; HGLOBAL hMyDlgTemplate = makeRTLResource(dialogID, &pMyDlgTemplate); _hSelf = ::CreateDialogIndirectParam(_hInst, pMyDlgTemplate, _hParent, (DLGPROC)dlgProc, (LPARAM)this); ::GlobalFree(hMyDlgTemplate); } else _hSelf = ::CreateDialogParam(_hInst, MAKEINTRESOURCE(dialogID), _hParent, (DLGPROC)dlgProc, (LPARAM)this); if (!_hSelf) { systemMessage("StaticDialog"); throw int(666); } ::SendMessage(_hParent, NPPM_MODELESSDIALOG, MODELESSDIALOGADD, (WPARAM)_hSelf); } BOOL CALLBACK StaticDialog::dlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG : { StaticDialog *pStaticDlg = (StaticDialog *)(lParam); pStaticDlg->_hSelf = hwnd; ::SetWindowLong(hwnd, GWL_USERDATA, (long)lParam); ::GetWindowRect(hwnd, &(pStaticDlg->_rc)); pStaticDlg->run_dlgProc(hwnd, message, wParam, lParam); return TRUE; } default : { StaticDialog *pStaticDlg = reinterpret_cast<StaticDialog *>(::GetWindowLong(hwnd, GWL_USERDATA)); if (!pStaticDlg) return FALSE; return pStaticDlg->run_dlgProc(hwnd, message, wParam, lParam); } } } void StaticDialog::alignWith(HWND handle, HWND handle2Align, PosAlign pos, POINT & point) { RECT rc, rc2; ::GetWindowRect(handle, &rc); point.x = rc.left; point.y = rc.top; switch (pos) { case ALIGNPOS_LEFT : ::GetWindowRect(handle2Align, &rc2); point.x -= rc2.right - rc2.left; break; case ALIGNPOS_RIGHT : ::GetWindowRect(handle, &rc2); point.x += rc2.right - rc2.left; break; case ALIGNPOS_TOP : ::GetWindowRect(handle2Align, &rc2); point.y -= rc2.bottom - rc2.top; break; default : //ALIGNPOS_BOTTOM ::GetWindowRect(handle, &rc2); point.y += rc2.bottom - rc2.top; break; } ::ScreenToClient(_hSelf, &point); }