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); }
int MainMenuSection::ProcessMsg(WPARAM wParam, LPARAM lParam) { int result = 0; int s; for (int i = 0; i < mControlCount; i++) { // check if the notification came from this section's control if (mControlPack[i].mControl == (HWND)lParam) { char freq; switch ( HIWORD(wParam) ) { // button clicked case BN_CLICKED: if (mControlPack[2].mControl == (HWND)lParam) { Edit_GetLine(mControlPack[0].mControl, 0, LPTSTR(&freq), 1); switch (freq) { case '1': getParams.Frequency = 11025; break; case '2': getParams.Frequency = 22050; break; case '4': getParams.Frequency = 44100; break; } Edit_GetLine(mControlPack[1].mControl, 0, LPTSTR(getParams.FreqType), 23); return 1; break; } else if (mControlPack[3].mControl == (HWND)lParam) { return 1; } } } } return 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); }
/* 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); }
static void notify_textchange(struct datawindow_priv *datawindow, int param1, int param2) { struct attr search_attr; struct search_list_result *res; char search_string[1024]; TCHAR converted_iso2[32]; int lineLength = Edit_LineLength(datawindow->hwndEdit, 0); TCHAR line[lineLength + 1]; (void)Edit_GetLine(datawindow->hwndEdit, 0, line, lineLength + 1); line[lineLength] = 0; (void)ListView_DeleteAllItems( datawindow->hwndList); TCHAR_TO_UTF8(line, search_string); search_attr.type = datawindow->currentSearchState; search_attr.u.str = search_string; if (lineLength<1) return; search_list_search(datawindow->sl, &search_attr, 1); TCHAR *tcharBuffer = NULL; int listIndex = 0; LVITEM lvI; lvI.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE; lvI.state = 0; lvI.stateMask = 0; while ((res=search_list_get_result(datawindow->sl)) && listIndex < 50) { switch (search_attr.type) { case attr_country_name: tcharBuffer = newSysString(res->country->name); break; case attr_town_name: tcharBuffer = newSysString(res->town->common.town_name); break; case attr_street_name: if (res->street->name) { tcharBuffer = newSysString(res->street->name); } else { continue; } break; default: dbg(0, "Unhandled search type"); } lvI.iItem = listIndex; lvI.iImage = listIndex; lvI.iSubItem = 0; lvI.lParam = (LPARAM) res->country->iso2; UTF8_TO_TCHAR(res->country->iso2, converted_iso2); lvI.pszText = converted_iso2;//LPSTR_TEXTCALLBACK; // sends an LVN_GETDISP message. (void)ListView_InsertItem(datawindow->hwndList, &lvI); ListView_SetItemText(datawindow->hwndList, listIndex, 1, tcharBuffer); g_free(tcharBuffer); dbg(0,"%s\n", res->country->name); listIndex++; } }
static ErrNo GetMatrix(const HWND hwndEdit,double **pMatrix,const int nRows,const int nColumns) { TCHAR szBuffer_t[MAXSIZE]; bool data = false; TCHAR seps[] = TEXT(" \t"); TCHAR *ptemp,*pstr,*pnext_token = NULL,*szBuffer = NULL; int iLine,iLength,iStart,iCount; int iMax = nColumns*20; //缺憾 获取数据还是有限定的 每行字符个数不能超过iMax个 szBuffer = new TCHAR[iMax]; //存储每一行获得的字符 iLine = Edit_GetLineCount(hwndEdit); if(iLine == 1) //判断是否没有输入数据 { if(!(iLength = Edit_GetText(hwndEdit,szBuffer,iMax))) { return NO_DATA_INPUT; } } else if(iLine<nRows) { return WRONG_MATRIX; } data = false; for(int i=0;i<iLine;i++) { iLength = Edit_GetLine(hwndEdit,i,szBuffer_t,MAXSIZE); if(iLength) //找出第一个有数据的行 { for(int j=0;j<iLength;j++) { if((szBuffer_t[j] >= TEXT('0') && szBuffer_t[j] <= TEXT('9')) || szBuffer_t[j] == TEXT('.')) { iStart = i; data = true; break; } } if(data) break; } } for(int i=iStart,k=0;i<iStart+nRows;i++,k++) //获取每行数据 { iCount = 0; iLength = Edit_GetLine(hwndEdit,i,szBuffer,iMax-1); szBuffer[iLength]=TEXT('\0'); //字符串分割 pstr = wcstok_s(szBuffer,seps,&pnext_token); while(pstr!=NULL) { if(*pstr == TEXT('+')) //判断是否有分割行 return WRONG_MATRIX; else if(!CharacterJudgement(pstr)) //判断是否非法字符输入 return INCORRECT_DATA; if(iCount >= nColumns) //判断每行输入数据个数是否超出限定矩阵维数 return WRONG_MATRIX; pMatrix[k][iCount] = wcstod(pstr,&ptemp); pstr = wcstok_s(NULL,seps,&pnext_token); iCount++; } if(iCount != nColumns) return WRONG_MATRIX; } delete szBuffer; szBuffer = NULL; return 0; }