Beispiel #1
0
// selects all text in an edit box if it's selected either
// through a keyboard shortcut or a non-selecting mouse click
// (or responds to Ctrl+Backspace as nowadays expected)
bool ExtendedEditWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNUSED(lParam);

    static bool delayFocus = false;

    switch (message) {
    case WM_LBUTTONDOWN:
        delayFocus = GetFocus() != hwnd;
        return true;

    case WM_LBUTTONUP:
        if (delayFocus) {
            DWORD sel = Edit_GetSel(hwnd);
            if (LOWORD(sel) == HIWORD(sel))
                PostMessage(hwnd, UWM_DELAYED_SET_FOCUS, 0, 0);
            delayFocus = false;
        }
        return true;

    case WM_KILLFOCUS:
        return false; // for easier debugging (make setting a breakpoint possible)

    case WM_SETFOCUS:
        if (!delayFocus)
            PostMessage(hwnd, UWM_DELAYED_SET_FOCUS, 0, 0);
        return true;

    case UWM_DELAYED_SET_FOCUS:
        Edit_SelectAll(hwnd);
        return true;

    case WM_KEYDOWN:
        if (VK_BACK != wParam || !IsCtrlPressed() || IsShiftPressed())
            return false;
        PostMessage(hwnd, UWM_DELAYED_CTRL_BACK, 0, 0);
        return true;

    case UWM_DELAYED_CTRL_BACK:
        {
            ScopedMem<WCHAR> text(win::GetText(hwnd));
            int selStart = LOWORD(Edit_GetSel(hwnd)), selEnd = selStart;
            // remove the rectangle produced by Ctrl+Backspace
            if (selStart > 0 && text[selStart - 1] == '\x7F') {
                memmove(text + selStart - 1, text + selStart, str::Len(text + selStart - 1) * sizeof(WCHAR));
                win::SetText(hwnd, text);
                selStart = selEnd = selStart - 1;
            }
            // remove the previous word (and any spacing after it)
            for (; selStart > 0 && str::IsWs(text[selStart - 1]); selStart--);
            for (; selStart > 0 && !str::IsWs(text[selStart - 1]); selStart--);
            Edit_SetSel(hwnd, selStart, selEnd);
            SendMessage(hwnd, WM_CLEAR, 0, 0);
        }
        return true;

    default:
        return false;
    }
}
Beispiel #2
0
char *GetFirstLine (char *pszLine) {

	char szLineBuffer [iMaxLineLength];
	int iEndSel = HIWORD (Edit_GetSel (hEditWnd));
	int iCopyCount;
	int iLineNr;
	register int i;

/* lese akt. Zeile */
	for (i = 0; i < sizeof (szLineBuffer); i++)
		 szLineBuffer [i] = '\0';
	iLineNr = Edit_LineFromChar (hEditWnd, iEndSel);
	Edit_GetLine (hEditWnd, iLineNr, szLineBuffer,
				  sizeof (szLineBuffer) -1);

/* berechne Indizes für Kopieren des sel. Strings */
   iEndSel -= Edit_LineIndex (hEditWnd, iLineNr);

/* berechne Anz. zu kopierender Zeichen */
   iCopyCount = strlen (szLineBuffer) - iEndSel;

/* überflüssige Zeichen überschreiben */
   memmove (szLineBuffer, szLineBuffer+iEndSel, iCopyCount);
   szLineBuffer [iCopyCount] = '\0';	// setze Endekennzeichen

/* in Zielstring kopieren */
   strcpy (pszLine, szLineBuffer);

   return (pszLine);
}
Beispiel #3
0
Datei: swnd.c Projekt: goriy/sif
static void current_path_to_edit (void)
{
int cur;
HWND manpath = GetDlgItem(hMainWindow, IDC_MANPATH);
  cur = LOWORD(Edit_GetSel (manpath));
  Edit_SetText (manpath, CurrentPath);
  Edit_SetSel (manpath, cur, cur);
}
Beispiel #4
0
/* Text suchen und selektieten Punkt übergeben  */
BOOL SearchText (char* pszKeyStr, POINT* pPoint) {

	register int i;
	int iEnd;
	char szLine [iMaxLineLength];
	char *pszAktPos;
	int iStart = HIWORD (Edit_GetSel (hEditWnd));
	int iLineNr = Edit_LineFromChar (hEditWnd, iStart);
	int iMaxLineNr = Edit_GetLineCount (hEditWnd);
	int iLineLength = Edit_LineLength (hEditWnd, iStart);

/*  1. (akt.) Zeile untersuchen */
	if (iLineLength) {
		for (i = 0; i < sizeof (szLine); i++)
			szLine [i] = '\0';
		GetFirstLine (szLine);
		if (pszAktPos = CompareStrings (szLine, pszKeyStr)) {
			iStart += pszAktPos - szLine;
			iEnd = iStart + strlen (pszKeyStr);
			pPoint->x = iStart; pPoint->y = iEnd;
			return (TRUE);
		}
		else
		   iStart += strlen (szLine) + 2; // einschl. 0D0A
	}
	else
		iStart += 2;

/* alle restlichen Zeilen untersuchen */
	for (++iLineNr; iLineNr < iMaxLineNr; iLineNr++) {
		if (iLineLength = Edit_LineLength (hEditWnd, iStart)) {
			for (i = 0; i < sizeof (szLine); i++)
				szLine [i] = '\0';
			Edit_GetLine (hEditWnd, iLineNr, szLine, sizeof (szLine) -1);
			if (pszAktPos = CompareStrings (szLine, pszKeyStr)) {
				iStart += pszAktPos - szLine;
				iEnd = iStart + strlen (pszKeyStr);
				pPoint->x = iStart; pPoint->y = iEnd;
				return (TRUE);
			}
			else
				iStart += iLineLength + 2;
		}
		else
			iStart += 2;
	}

/* Punkt auf ungültigen Wert setzen */
	pPoint->x = -1; pPoint->y = -1;
	return (FALSE);
}
Beispiel #5
0
/* This function writes the appropriate signature for the specified
 * topic.
 */
void FASTCALL SetEditSignature( HWND hwndEdit, PTL ptl )
{
   LPSTR lpszSignature;
   char * pszSig;

   pszSig = NULL;
   if( NULL == ptl )
      pszSig = szGlobalSig;
   else
      {
      TOPICINFO topicinfo;

      Amdb_GetTopicInfo( ptl, &topicinfo );
      if( topicinfo.szSigFile[ 0 ] )
         pszSig = topicinfo.szSigFile;
      }
   if( NULL != pszSig )
      if( NULL != ( lpszSignature = GetEditSignature( pszSig ) ) )
         {
         DWORD dwSig1Sel;

         /* Save the caret position and append the signature to the end of the
          * current text. Then put the caret back where it was.
          */
         dwSig1Sel = Edit_GetSel( hwndEdit );
         if( fEditAtTop )
         {
         Edit_SetSel( hwndEdit, 0, 0 );
         Edit_ReplaceSel( hwndEdit, lpszSignature );
         Edit_SetSel( hwndEdit, 0, 0 );
         Edit_ScrollCaret( hwndEdit );
         }
         else
         {
         Edit_SetSel( hwndEdit, USHRT_MAX, USHRT_MAX );
         Edit_ReplaceSel( hwndEdit, lpszSignature );
         Edit_SetSel( hwndEdit, LOWORD(dwSig1Sel), HIWORD(dwSig1Sel) );
         }

         FreeMemory( &lpszSignature );
         }
}
Beispiel #6
0
/* Selektierten Text lesen */
char *GetSelectedText (char *pszResultText, int iMaxCopy) {

	char szLineBuffer [iMaxLineLength];
	DWORD dwSel = Edit_GetSel (hEditWnd);
	int iAnfSel = LOWORD (dwSel);
	int iEndSel = HIWORD (dwSel);
	int iCopyCount;
	int iLineNr;
	register int i;
		
	iCopyCount = iEndSel - iAnfSel;
	if (iCopyCount) {

/* akt. Zeile lesen */
		for (i = 0; i < sizeof (szLineBuffer); i++)
			szLineBuffer [i] = '\0';
		iLineNr = Edit_LineFromChar (hEditWnd, -1);
		Edit_GetLine (hEditWnd, iLineNr, szLineBuffer,
					  sizeof (szLineBuffer) -1);

/* berechne Indizes für Kopieren des sel. Strings */
		iAnfSel -= Edit_LineIndex (hEditWnd, iLineNr);

/* korrigiere ggf. Anz. zu kopierender Zeichen */
		if (Edit_LineFromChar (hEditWnd, iEndSel) != iLineNr) {
			iEndSel = strlen (szLineBuffer);
			iCopyCount = iEndSel - iAnfSel;
		}

/* begrenze ggf. Anz. zu kopierender Zeichen */
		if (iCopyCount > iMaxCopy)
			iCopyCount = iMaxCopy;

/* überflüssige Zeichen überschreiben */
		memmove (szLineBuffer, szLineBuffer+iAnfSel, iCopyCount);
		szLineBuffer [iCopyCount] = '\0';	 // setze Endekennzeichen

/* in Zielstring kopieren */
		strcpy (pszResultText, szLineBuffer);
	}
	return (pszResultText);
}
Beispiel #7
0
INT_PTR CDialogManage::CTabSkins::OnCommand(WPARAM wParam, LPARAM lParam)
{
	if (!m_HandleCommands)
	{
		// Values are being changed/reset, no need to apply changes
		return FALSE;
	}

	switch (LOWORD(wParam))
	{
	case IDC_MANAGESKINS_ACTIVESKINS_BUTTON:
		{
			HMENU menu = CreatePopupMenu();

			// Add active skins to menu
			std::map<std::wstring, CMeterWindow*>::const_iterator iter = Rainmeter->GetAllMeterWindows().begin();
			int index = 0;
			for ( ; iter != Rainmeter->GetAllMeterWindows().end(); ++iter)
			{
				std::wstring name = ((*iter).second)->GetFolderPath() + L'\\';
				name += ((*iter).second)->GetFileName();
				InsertMenu(menu, index, MF_BYPOSITION, ID_CONFIG_FIRST + index, name.c_str());
				++index;
			}

			if (index > 0)
			{
				RECT r;
				GetWindowRect((HWND)lParam, &r);

				// Show context menu
				TrackPopupMenu(
					menu,
					TPM_RIGHTBUTTON | TPM_LEFTALIGN,
					(*GetString(ID_STR_ISRTL) == L'1') ? r.right : r.left,
					--r.bottom,
					0,
					m_Window,
					NULL
				);
			}

			DestroyMenu(menu);
		}
		break;

	case IDC_MANAGESKINS_CREATEPACKAGE_BUTTON:
		{
			std::wstring file = Rainmeter->GetPath() + L"SkinInstaller.exe";
			RunFile(file.c_str(), L"/Packager");
		}
		break;

	case IDC_MANAGESKINS_LOAD_BUTTON:
		{
			if (!m_SkinWindow)
			{
				// Skin not active, load
				std::pair<int, int> indexes = Rainmeter->GetMeterWindowIndex(m_SkinFolderPath, m_SkinFileName);
				if (indexes.first != -1 && indexes.second != -1)
				{
					Rainmeter->ActivateSkin(indexes.first, indexes.second);

					// Fake selection change to update controls
					NMHDR nm;
					nm.code = TVN_SELCHANGED;
					nm.idFrom = IDC_MANAGESKINS_SKINS_TREEVIEW;
					nm.hwndFrom = GetDlgItem(m_Window, IDC_MANAGESKINS_SKINS_TREEVIEW);
					OnNotify(0, (LPARAM)&nm);
				}
			}
			else
			{
				m_HandleCommands = false;
				Rainmeter->DeactivateSkin(m_SkinWindow, -1);
			}
		}
		break;

	case IDC_MANAGESKINS_REFRESH_BUTTON:
		if (m_SkinWindow)
		{
			m_SkinWindow->Refresh(false);
		}
		break;

	case IDC_MANAGESKINS_EDIT_BUTTON:
		Rainmeter->EditSkinFile(m_SkinFolderPath, m_SkinFileName);
		break;

	case IDC_MANAGESKINS_X_TEXT:
		if (HIWORD(wParam) == EN_CHANGE)
		{
			WCHAR buffer[32];
			m_IgnoreUpdate = true;
			int x = (GetWindowText((HWND)lParam, buffer, 32) > 0) ? _wtoi(buffer) : 0;
			m_SkinWindow->MoveWindow(x, m_SkinWindow->GetY());

			if (x > m_SkinWindow->GetX())
			{
				_itow_s(m_SkinWindow->GetX(), buffer, 10);
				Edit_SetText((HWND)lParam, buffer);
			}
		}
		break;

	case IDC_MANAGESKINS_Y_TEXT:
		if (HIWORD(wParam) == EN_CHANGE)
		{
			WCHAR buffer[32];
			m_IgnoreUpdate = true;
			int y = (GetWindowText((HWND)lParam, buffer, 32) > 0) ? _wtoi(buffer) : 0;
			m_SkinWindow->MoveWindow(m_SkinWindow->GetX(), y);

			if (y > m_SkinWindow->GetY())
			{
				_itow_s(m_SkinWindow->GetY(), buffer, 10);
				Edit_SetText((HWND)lParam, buffer);
			}
		}
		break;

	case IDC_MANAGESKINS_LOADORDER_TEXT:
		if (HIWORD(wParam) == EN_CHANGE)
		{
			if (m_IgnoreUpdate)
			{
				// To avoid infinite loop after setting value below
				m_IgnoreUpdate = false;
			}
			else
			{
				// Convert text to number and set it to get rid of extra chars
				WCHAR buffer[32];
				int len = GetWindowText((HWND)lParam, buffer, 32);
				if ((len == 0) || (len == 1 && buffer[0] == L'-'))
				{
					// Ignore if empty or if - is only char
					break;
				}

				// Get selection
				DWORD sel = Edit_GetSel((HWND)lParam);

				// Reset value (to get rid of invalid chars)
				m_IgnoreUpdate = true;
				int value = _wtoi(buffer);

				_itow_s(value, buffer, 10);
				SetWindowText((HWND)lParam, buffer);

				// Reset selection
				Edit_SetSel((HWND)lParam, LOWORD(sel), HIWORD(sel));

				WritePrivateProfileString(m_SkinFolderPath.c_str(), L"LoadOrder", buffer, Rainmeter->GetIniFile().c_str());
				std::pair<int, int> indexes = Rainmeter->GetMeterWindowIndex(m_SkinWindow);
				if (indexes.first != -1)
				{
					Rainmeter->SetLoadOrder(indexes.first, value);

					std::multimap<int, CMeterWindow*> windows;
					Rainmeter->GetMeterWindowsByLoadOrder(windows);

					CSystem::PrepareHelperWindow();

					// Reorder window z-position to reflect load order
					std::multimap<int, CMeterWindow*>::const_iterator iter = windows.begin();
					for ( ; iter != windows.end(); ++iter)
					{
						CMeterWindow* mw = (*iter).second;
						mw->ChangeZPos(mw->GetWindowZPosition(), true);
					}
				}
			}
		}
		break;

	case IDC_MANAGESKINS_DISPLAYMONITOR_BUTTON:
		{
			HMENU menu = LoadMenu(Rainmeter->GetResourceInstance(), MAKEINTRESOURCE(IDR_SKIN_MENU));
			if (menu)
			{
				HMENU subMenu = GetSubMenu(menu, 0);	// Skin menu
				subMenu = GetSubMenu(subMenu, 4); // Settings menu
				subMenu = GetSubMenu(subMenu, 0); // Position menu
				subMenu = GetSubMenu(subMenu, 0); // Display monitor menu
				Rainmeter->CreateMonitorMenu(subMenu, m_SkinWindow);

				RECT r;
				GetWindowRect((HWND)lParam, &r);

				// Show context menu
				TrackPopupMenu(
					subMenu,
					TPM_RIGHTBUTTON | TPM_LEFTALIGN,
					(*GetString(ID_STR_ISRTL) == L'1') ? r.right : r.left,
					--r.bottom,
					0,
					m_Window,
					NULL
				);

				DestroyMenu(menu);
			}
		}
		break;

	case IDC_MANAGESKINS_DRAGGABLE_CHECKBOX:
		m_IgnoreUpdate = true;
		m_SkinWindow->SetWindowDraggable(!m_SkinWindow->GetWindowDraggable());
		break;

	case IDC_MANAGESKINS_CLICKTHROUGH_CHECKBOX:
		m_IgnoreUpdate = true;
		m_SkinWindow->SetClickThrough(!m_SkinWindow->GetClickThrough());
		break;

	case IDC_MANAGESKINS_KEEPONSCREEN_CHECKBOX:
		m_IgnoreUpdate = true;
		m_SkinWindow->SetKeepOnScreen(!m_SkinWindow->GetKeepOnScreen());
		break;

	case IDC_MANAGESKINS_SAVEPOSITION_CHECKBOX:
		m_IgnoreUpdate = true;
		m_SkinWindow->SetSavePosition(!m_SkinWindow->GetSavePosition());
		break;

	case IDC_MANAGESKINS_SNAPTOEDGES_CHECKBOX:
		m_IgnoreUpdate = true;
		m_SkinWindow->SetSnapEdges(!m_SkinWindow->GetSnapEdges());
		break;

	case IDC_MANAGESKINS_ZPOSITION_COMBOBOX:
		if (HIWORD(wParam) == CBN_SELCHANGE)
		{
			m_IgnoreUpdate = true;
			ZPOSITION zpos = (ZPOSITION)(ComboBox_GetCurSel((HWND)lParam) - 2);
			m_SkinWindow->SetWindowZPosition(zpos);
		}
		break;

	case IDC_MANAGESKINS_TRANSPARENCY_COMBOBOX:
		if (HIWORD(wParam) == CBN_SELCHANGE)
		{
			m_IgnoreUpdate = true;
			int sel = ComboBox_GetCurSel((HWND)lParam) + IDM_SKIN_TRANSPARENCY_0;
			SendMessage(m_SkinWindow->GetWindow(), WM_COMMAND, sel, 0);
		}
		break;

	case IDC_MANAGESKINS_ONHOVER_COMBOBOX:
		if (HIWORD(wParam) == CBN_SELCHANGE)
		{
			m_IgnoreUpdate = true;
			HIDEMODE hide = (HIDEMODE)ComboBox_GetCurSel((HWND)lParam);
			m_SkinWindow->SetWindowHide(hide);
		}
		break;

	case IDM_MANAGESKINSMENU_EXPAND:
		{
			HWND tree = GetDlgItem(m_Window, IDC_MANAGESKINS_SKINS_TREEVIEW);
			HTREEITEM item = TreeView_GetSelection(tree);
			TreeView_Expand(tree, item, TVE_TOGGLE);
		}
		break;

	case IDM_MANAGESKINSMENU_OPENFOLDER:
		{
			HWND tree = GetDlgItem(m_Window, IDC_MANAGESKINS_SKINS_TREEVIEW);
			Rainmeter->OpenSkinFolder(GetTreeSelectionPath(tree));
		}
		break;

	default:
		if (wParam >= ID_CONFIG_FIRST && wParam <= ID_CONFIG_LAST)
		{
			std::map<std::wstring, CMeterWindow*>::const_iterator iter = Rainmeter->GetAllMeterWindows().begin();
			int index = (int)wParam - ID_CONFIG_FIRST;
			int i = 0;
			for ( ; iter != Rainmeter->GetAllMeterWindows().end(); ++iter)
			{
				if (i == index)
				{
					std::wstring name = ((*iter).second)->GetFolderPath() + L'\\';
					name += ((*iter).second)->GetFileName();

					HWND item = GetDlgItem(m_Window, IDC_MANAGESKINS_SKINS_TREEVIEW);
					SelectTreeItem(item, TreeView_GetRoot(item), name.c_str());
					break;
				}

				++i;
			}
		}
		else if (wParam == IDM_SKIN_MONITOR_AUTOSELECT ||
			wParam == IDM_SKIN_MONITOR_PRIMARY ||
			wParam >= ID_MONITOR_FIRST && wParam <= ID_MONITOR_LAST)
		{
			if (m_SkinWindow)
			{
				SendMessage(m_SkinWindow->GetWindow(), WM_COMMAND, wParam, 0);
			}
			break;
		}

		return 1;
	}

	return 0;
}
Beispiel #8
0
INT_PTR CDialogPackage::CTabOptions::OnCommand(WPARAM wParam, LPARAM lParam)
{
    switch (LOWORD(wParam))
    {
    case IDC_PACKAGEOPTIONS_FILEBROWSE_BUTTON:
    {
        WCHAR buffer[MAX_PATH];
        HWND item = GetDlgItem(m_Window, IDC_PACKAGEOPTIONS_FILE_EDIT);
        GetWindowText(item, buffer, _countof(buffer));

        OPENFILENAME ofn = { sizeof(OPENFILENAME) };
        ofn.lpstrFilter = L"Rainmeter skin package (.rmskin)\0*.rmskin";
        ofn.lpstrTitle = L"Select Rainmeter skin package";
        ofn.lpstrDefExt = L"dll";
        ofn.lpstrFile = buffer;
        ofn.nMaxFile = _countof(buffer);
        ofn.hwndOwner = c_Dialog->GetWindow();

        if (GetOpenFileName(&ofn))
        {
            c_Dialog->m_TargetFile = buffer;
            SetWindowText(item, buffer);
        }
    }
    break;

    case IDC_PACKAGEOPTIONS_DONOTHING_RADIO:
    {
        HWND item = GetDlgItem(m_Window, IDC_PACKAGEOPTIONS_LOADSKIN_EDIT);
        ShowWindow(item, SW_HIDE);
        item = GetDlgItem(m_Window, IDC_PACKAGEOPTIONS_LOADSKINBROWSE_BUTTON);
        ShowWindow(item, SW_HIDE);
        item = GetDlgItem(m_Window, IDC_PACKAGEOPTIONS_LOADTHEME_COMBO);
        ShowWindow(item, SW_HIDE);

        c_Dialog->m_Load.clear();
    }
    break;

    case IDC_PACKAGEOPTIONS_LOADSKIN_RADIO:
    {
        HWND item = GetDlgItem(m_Window, IDC_PACKAGEOPTIONS_LOADSKIN_EDIT);
        ShowWindow(item, SW_SHOWNORMAL);

        WCHAR buffer[MAX_PATH];
        GetWindowText(item, buffer, _countof(buffer));
        c_Dialog->m_Load = buffer;
        c_Dialog->m_LoadLayout = false;

        item = GetDlgItem(m_Window, IDC_PACKAGEOPTIONS_LOADSKINBROWSE_BUTTON);
        ShowWindow(item, SW_SHOWNORMAL);
        item = GetDlgItem(m_Window, IDC_PACKAGEOPTIONS_LOADTHEME_COMBO);
        ShowWindow(item, SW_HIDE);
    }
    break;

    case IDC_PACKAGEOPTIONS_LOADTHEME_RADIO:
    {
        HWND item = GetDlgItem(m_Window, IDC_PACKAGEOPTIONS_LOADSKIN_EDIT);
        ShowWindow(item, SW_HIDE);
        item = GetDlgItem(m_Window, IDC_PACKAGEOPTIONS_LOADSKINBROWSE_BUTTON);
        ShowWindow(item, SW_HIDE);
        item = GetDlgItem(m_Window, IDC_PACKAGEOPTIONS_LOADTHEME_COMBO);
        ShowWindow(item, SW_SHOWNORMAL);

        WCHAR buffer[MAX_PATH];
        GetWindowText(item, buffer, _countof(buffer));
        c_Dialog->m_Load = buffer;
        c_Dialog->m_LoadLayout = true;
    }
    break;

    case IDC_PACKAGEOPTIONS_LOADSKINBROWSE_BUTTON:
    {
        WCHAR buffer[MAX_PATH];
        HWND item = GetDlgItem(m_Window, IDC_PACKAGEOPTIONS_LOADSKIN_EDIT);
        GetWindowText(item, buffer, _countof(buffer));

        OPENFILENAME ofn = { sizeof(OPENFILENAME) };
        ofn.Flags = OFN_FILEMUSTEXIST;
        ofn.FlagsEx = OFN_EX_NOPLACESBAR;
        ofn.lpstrFilter = L"Rainmeter skin file (.ini)\0*.ini";
        ofn.lpstrTitle = L"Select Rainmeter skin file";
        ofn.lpstrDefExt = L"ini";
        ofn.lpstrFile = buffer;
        ofn.nMaxFile = _countof(buffer);
        ofn.lpstrInitialDir = c_Dialog->m_SkinFolder.second.c_str();
        ofn.hwndOwner = c_Dialog->GetWindow();

        if (GetOpenFileName(&ofn))
        {
            // Make sure user didn't browse to some random folder
            if (_wcsnicmp(ofn.lpstrInitialDir, buffer, c_Dialog->m_SkinFolder.second.length()) == 0)
            {
                // Skip everything before actual skin folder
                const WCHAR* folderPath = buffer + c_Dialog->m_SkinFolder.second.length() - c_Dialog->m_SkinFolder.first.length() - 1;
                SetWindowText(item, folderPath);
                c_Dialog->m_Load = folderPath;
            }
        }
    }
    break;

    case IDC_PACKAGEOPTIONS_RAINMETERVERSION_EDIT:
        if (HIWORD(wParam) == EN_CHANGE)
        {
            WCHAR buffer[32];
            GetWindowText((HWND)lParam, buffer, _countof(buffer));

            // Get caret position
            DWORD sel = Edit_GetSel((HWND)lParam);

            // Only allow numbers and period
            WCHAR* version = buffer;
            while (*version)
            {
                if (iswdigit(*version) || *version == L'.')
                {
                    ++version;
                }
                else
                {
                    *version = L'\0';
                    SetWindowText((HWND)lParam, buffer);

                    // Reset caret position
                    Edit_SetSel((HWND)lParam, LOWORD(sel), HIWORD(sel));
                    break;
                }
            }

            c_Dialog->m_MinimumRainmeter = buffer;
        }
        break;

    case IDC_PACKAGEOPTIONS_WINDOWSVERSION_COMBO:
        if (HIWORD(wParam) == CBN_SELCHANGE)
        {
            int sel = ComboBox_GetCurSel((HWND)lParam);
            c_Dialog->m_MinimumWindows = g_OsNameVersions[sel].version;
        }
        break;

    default:
        return FALSE;
    }

    return TRUE;
}
Beispiel #9
0
void CEditBox::GetSel(LPDWORD pStart, LPDWORD pEnd)
{
	Edit_GetSel(this->GetHWnd(), pStart, pEnd);
}
void TextEditor::GetContents()
{
    _contentsLength = GetWindowText(_editControlHandle, _contents, MAX_FILE_LENGTH);
    _caret = (int)LOWORD(Edit_GetSel(_editControlHandle));
}
Beispiel #11
0
/* This function locates the old signature in the specified edit
 * control and replaces it with the new one.
 */
void FASTCALL ReplaceEditSignature( HWND hwndEdit, char * pszOldSig, char * pszNewSig, BOOL fTop )
{
   LPSTR lpszOldSigText;
   LPSTR lpszNewSigText;
   UINT cbEdit;

   /* Get some lengths. Skip the replacement if
    * the signature is smaller than the edit text.
    */
   cbEdit = Edit_GetTextLength( hwndEdit );
   if( NULL != ( lpszOldSigText = GetEditSignature( pszOldSig ) ) )
      {
      if( NULL != ( lpszNewSigText = GetEditSignature( pszNewSig ) ) )
         {
         if( strlen(lpszOldSigText) <= cbEdit )
            {
            LPSTR lpText;
         
            INITIALISE_PTR(lpText);
            if( fNewMemory( &lpText, cbEdit + 1 ) )
               {
               DWORD sel;
               int nOldSig;
               int selEnd;
               int selStart;
         
               /* Get the edit control contents.
                */
               sel = Edit_GetSel( hwndEdit );
               selStart = LOWORD(sel);
               selEnd = HIWORD(sel);
               Edit_GetText( hwndEdit, lpText, cbEdit+1 );
               nOldSig = FStrMatch( lpText, lpszOldSigText, TRUE, FALSE );
#ifdef USEBIGEDIT
               SetWindowRedraw( hwndEdit, FALSE );
#endif USEBIGEDIT
               if( -1 != nOldSig )
                  {
                  Edit_SetSel( hwndEdit, nOldSig, nOldSig + strlen(lpszOldSigText) );
                  Edit_ReplaceSel( hwndEdit, lpszNewSigText );
                  }
               else
                  {
                  /* Not found, so go to end of edit text and append new
                   * signature there.
                   */
                  if( fTop )
                     Edit_SetSel( hwndEdit, 0, 0 );
                  else
                     Edit_SetSel( hwndEdit, 32767, 32767 );
                  Edit_ReplaceSel( hwndEdit, lpszNewSigText );
                  }
               Edit_SetSel( hwndEdit, selStart, selEnd );
#ifdef USEBIGEDIT
               SetWindowRedraw( hwndEdit, TRUE );
#endif USEBIGEDIT
               UpdateWindow( hwndEdit );
               FreeMemory( &lpText );
               }
            }
         FreeMemory( &lpszNewSigText );
         }
      FreeMemory( &lpszOldSigText );
      }
}