int strcasencmp(LPCSTR s1,LPCSTR s2,DWORD n) { if (int(n)<1) return 0; TCHAR *tmp1,*tmp2; int ret; DWORD n1,n2; for (n1=0;n1<n && s1[n1]!='\0';n1++); for (n2=0;n2<n && s2[n2]!='\0';n2++); tmp1=new CHAR[n+1]; if (tmp1==NULL) SetHFCError(HFC_CANNOTALLOC); tmp2=new CHAR[n+1]; if (tmp2==NULL) SetHFCError(HFC_CANNOTALLOC); dMemCopy(tmp1,s1,n1); dMemCopy(tmp2,s2,n2); tmp1[n1]='\0'; tmp2[n2]='\0'; CharLower(tmp1); CharLower(tmp2); ret=strcmp(tmp1,tmp2); delete[] tmp1; delete[] tmp2; return ret; }
int CTargetWnd::GetText(CStringW& str) const { if (IsUnicodeSystem()) { int len=(int)::SendMessageW(m_hWnd,WM_GETTEXTLENGTH,0,0)+2; LPWSTR text=new WCHAR[len]; if (text==NULL) { SetHFCError(HFC_CANNOTALLOC); return FALSE; } len=(int)::SendMessageW(m_hWnd,WM_GETTEXT,(WPARAM)len,(LPARAM)text); str.Copy(text,len); delete[] text; return len; } int len=(int)::SendMessage(m_hWnd,WM_GETTEXTLENGTH,0,0)+2; LPSTR text=new CHAR[len]; if (text==NULL) { SetHFCError(HFC_CANNOTALLOC); return FALSE; } len=(int)::SendMessageA(m_hWnd,WM_GETTEXT,(WPARAM)len,(LPARAM)text); str.Copy(text,len); delete[] text; return len; }
LPWSTR allocstringW(UINT nID,TypeOfResourceHandle bType) { LPWSTR szBuffer; szBuffer=new WCHAR[STR_LOADSTRINGBUFLEN]; if (szBuffer==NULL) { SetHFCError(HFC_CANNOTALLOCATE); return NULL; } UINT nDataLen=::LoadString(nID,szBuffer,STR_LOADSTRINGBUFLEN,bType); if (nDataLen>=STR_LOADSTRINGBUFLEN-2) { for (DWORD i=2;nDataLen>=i*STR_LOADSTRINGBUFLEN-2;i++) { delete[] szBuffer; szBuffer=new WCHAR[i*STR_LOADSTRINGBUFLEN]; nDataLen=::LoadString(nID,szBuffer,i*STR_LOADSTRINGBUFLEN,bType); } } WCHAR* pText=new WCHAR[nDataLen+1]; MemCopy(pText,szBuffer,(nDataLen+1)*2); delete[] szBuffer; return pText; }
LPSTR allocstring(UINT nID,TypeOfResourceHandle bType) { LPSTR szBuffer; szBuffer=new CHAR[STR_LOADSTRINGBUFLEN]; if (szBuffer==NULL) { SetHFCError(HFC_CANNOTALLOCATE); return FALSE; } UINT nDataLen=::LoadStringA(GetResourceHandle(bType),nID,szBuffer,STR_LOADSTRINGBUFLEN); if (nDataLen>=STR_LOADSTRINGBUFLEN-2) { for (DWORD i=2;nDataLen>=i*STR_LOADSTRINGBUFLEN-2;i++) { delete[] szBuffer; szBuffer=new CHAR[i*STR_LOADSTRINGBUFLEN]; nDataLen=::LoadStringA(GetResourceHandle(bType),nID,szBuffer,i*STR_LOADSTRINGBUFLEN); } } char* pText=new char[nDataLen+1]; MemCopy(pText,szBuffer,nDataLen+1); delete[] szBuffer; return pText; }
int strcasencmp(LPCWSTR s1,LPCWSTR s2,DWORD n) { if (int(n)<1) return 0; WCHAR *tmp1,*tmp2; int ret; DWORD n1,n2; for (n1=0;n1<n && s1[n1]!='\0';n1++); for (n2=0;n2<n && s2[n2]!='\0';n2++); tmp1=new WCHAR[n+1]; if (tmp1==NULL) SetHFCError(HFC_CANNOTALLOC); tmp2=new WCHAR[n+1]; if (tmp2==NULL) SetHFCError(HFC_CANNOTALLOC); dMemCopy(tmp1,s1,n1*2); dMemCopy(tmp2,s2,n2*2); tmp1[n1]='\0'; tmp2[n2]='\0'; if (IsUnicodeSystem()) { CharLowerW(tmp1); CharLowerW(tmp2); } else { _wcslwr_s(tmp1,n+1); _wcslwr_s(tmp2,n+1); } ret=wcscmp(tmp1,tmp2); delete[] tmp1; delete[] tmp2; return ret; }
int strcasecmp(LPCWSTR s1,LPCWSTR s2) { WCHAR *tmp1,*tmp2; int ret; DWORD nLen1=(DWORD)istrlenw(s1); DWORD nLen2=(DWORD)istrlenw(s2); tmp1=new WCHAR[nLen1+2]; if (tmp1==NULL) SetHFCError(HFC_CANNOTALLOC); CopyMemory(tmp1,s1,nLen1*2+2); tmp2=new WCHAR[nLen2+2]; if (tmp2==NULL) SetHFCError(HFC_CANNOTALLOC); CopyMemory(tmp2,s2,nLen2*2+2); CharLowerBuffW(tmp1,nLen1); CharLowerBuffW(tmp2,nLen2); ret=wcscmp(tmp1,tmp2); delete[] tmp1; delete[] tmp2; return ret; }
POSITION CMDIChildWndList::AddWindow(CMDIChildWnd* pWnd) { CNode* tmp=new CNode; if (tmp==NULL) { SetHFCError(HFC_CANNOTALLOC); return NULL; } tmp->pWnd=pWnd; tmp->pPrev=NULL; tmp->pNext=m_pNodeHead; if (m_pNodeHead!=NULL) m_pNodeHead->pPrev=tmp; else m_pNodeTail=tmp; m_pNodeHead=tmp; m_nCount++; return (POSITION) tmp; }
ID2W::ID2W(UINT nID,TypeOfResourceHandle bType) { pWStr=new WCHAR[STR_LOADSTRINGBUFLEN]; if (pWStr==NULL) { SetHFCError(HFC_CANNOTALLOCATE); return; } UINT nDataLen=::LoadString(nID,pWStr,STR_LOADSTRINGBUFLEN,bType); if (nDataLen>=STR_LOADSTRINGBUFLEN-2) { for (DWORD i=2;nDataLen>=i*STR_LOADSTRINGBUFLEN-2;i++) { delete[] pWStr; pWStr=new WCHAR[i*STR_LOADSTRINGBUFLEN]; nDataLen=::LoadString(nID,pWStr,i*STR_LOADSTRINGBUFLEN,bType); } } }
ID2A::ID2A(UINT nID,TypeOfResourceHandle bType) { pStr=new CHAR[STR_LOADSTRINGBUFLEN]; if (pStr==NULL) { SetHFCError(HFC_CANNOTALLOCATE); return; } UINT nDataLen=::LoadStringA(GetResourceHandle(bType),nID,pStr,STR_LOADSTRINGBUFLEN); if (nDataLen>=STR_LOADSTRINGBUFLEN-2) { for (DWORD i=2;nDataLen>=i*STR_LOADSTRINGBUFLEN-2;i++) { delete[] pStr; pStr=new CHAR[i*STR_LOADSTRINGBUFLEN]; nDataLen=::LoadStringA(GetResourceHandle(bType),nID,pStr,i*STR_LOADSTRINGBUFLEN); } } }
LRESULT CALLBACK CDateTimeCtrlEx::WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { CDateTimeCtrlEx* pData; if (msg==WM_CREATE) { CREATESTRUCT* pCreateStruct=(CREATESTRUCT*)lParam; if (pCreateStruct->lpCreateParams==NULL) { pData=new CDateTimeCtrlEx(hWnd); if (pData==NULL) { SetHFCError(HFC_CANNOTALLOC); return FALSE; } } else { pData=(CDateTimeCtrlEx*)pCreateStruct->lpCreateParams; pData->Attach(hWnd); } ::SetWindowLongPtr(hWnd,GWLP_USERDATA,(LONG_PTR)pData); pData->CreateControls(); return FALSE; } pData=(CDateTimeCtrlEx*)::GetWindowLongPtr(hWnd,GWLP_USERDATA); if (pData==NULL) return DefWindowProc(hWnd,msg,wParam,lParam); switch (msg) { case WM_DESTROY: delete pData; ::SetWindowLongPtr(hWnd,GWLP_USERDATA,(LONG_PTR)NULL); return 0; case WM_ENABLE: ::EnableWindow(pData->m_hTimePickerWnd,(BOOL)wParam); ::EnableWindow(pData->m_hEditWnd,(BOOL)wParam); ::EnableWindow(pData->m_hSpinWnd,(BOOL)wParam); pData->Invalidate(); break; case DTM_GETSYSTEMTIME: return pData->GetExplicitDate((LPSYSTEMTIME)lParam,(DWORD)wParam); case DTM_SETSYSTEMTIME: return pData->SetExplicitDate((LPSYSTEMTIME)lParam,(DWORD)wParam); case DTM_GETRANGE: case DTM_SETRANGE: case DTM_SETFORMATA: case DTM_SETFORMATW: case DTM_SETMCCOLOR: case DTM_GETMCCOLOR: case DTM_GETMONTHCAL: case DTM_SETMCFONT: case DTM_GETMCFONT: return ::SendMessage(pData->m_hTimePickerWnd,msg,wParam,lParam); case WM_PAINT: pData->OnPaint(); break; case WM_MOUSEMOVE: if ((pData->m_dwFlags&ButtonStateMask)==Normal) { pData->m_dwFlags&=~ButtonStateMask; pData->m_dwFlags|=Hot; pData->Invalidate(); pData->SetCapture(); } else if ((pData->m_dwFlags&ButtonStateMask)==Hot) { CRect rcButtonArea; pData->GetClientRect(&rcButtonArea); if (pData->m_hTheme!=NULL && pData->m_pDrawThemeBackground!=NULL) rcButtonArea.left=rcButtonArea.right-BUTTON_WIDTHTHEME; else rcButtonArea.left=rcButtonArea.right-BUTTON_WIDTHORIG; if (!rcButtonArea.IsPtInRect(LOWORD(lParam),HIWORD(lParam))) { ReleaseCapture(); pData->m_dwFlags&=~ButtonStateMask; pData->m_dwFlags|=Normal; pData->Invalidate(); } } return 0; case WM_LBUTTONDOWN: { if ((pData->m_dwFlags&ButtonStateMask)==Hot) ReleaseCapture(); pData->m_dwFlags&=~ButtonStateMask; pData->m_dwFlags|=Pressed; pData->Invalidate(); RECT rcWindowRect; ::GetWindowRect(hWnd,&rcWindowRect); CMenu PopupMenus; PopupMenus.LoadMenu(IDR_POPUPMENU); if ((pData->m_dwFlags&ModeMask)==ModeExplicit) PopupMenus.CheckMenuItem(IDM_EXPLICITDATE,MF_CHECKED|MF_BYCOMMAND); else PopupMenus.CheckMenuItem(IDM_RELATIVEDATE,MF_CHECKED|MF_BYCOMMAND); int nCmd=TrackPopupMenu(PopupMenus.GetSubMenu(SUBMENU_DATETIMEPICKEXMENU), TPM_RIGHTALIGN|TPM_TOPALIGN|TPM_RIGHTBUTTON|TPM_NONOTIFY|TPM_RETURNCMD, rcWindowRect.right,rcWindowRect.bottom,0,hWnd,NULL); PopupMenus.DestroyMenu(); switch (nCmd) { case IDM_EXPLICITDATE: pData->ChangeMode(FALSE); break; case IDM_RELATIVEDATE: pData->ChangeMode(TRUE); break; } if (!(pData->m_dwFlags&DontSendNotifications)) ::PostMessage(::GetParent(hWnd),WM_COMMAND,MAKEWPARAM(::GetWindowLong(hWnd,GWL_ID),DTXN_MODECHANGED),(LPARAM)hWnd); pData->m_dwFlags&=~ButtonStateMask; pData->m_dwFlags|=Normal; pData->Invalidate(); return 0; } case WM_LBUTTONUP: if ((pData->m_dwFlags&ButtonStateMask)==Pressed) { ReleaseCapture(); pData->m_dwFlags&=~ButtonStateMask; pData->m_dwFlags|=Normal; pData->Invalidate(); } return 0; case WM_SETFONT: if (pData!=NULL) { ::SendMessage(pData->m_hTimePickerWnd,WM_SETFONT,wParam,lParam); ::SendMessage(pData->m_hEditWnd,WM_SETFONT,wParam,lParam); ::SendMessage(pData->m_hSpinWnd,WM_SETFONT,wParam,lParam); } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_RELATIVEDATE: switch (HIWORD(wParam)) { case EN_KILLFOCUS: pData->SetRelativeDate((int)::SendMessage(pData->m_hSpinWnd,UDM_GETPOS32,0,0), DTXF_NOSPINCHANGE|DTXF_NOMODECHANGE); break; case EN_CHANGE: if (!(pData->m_dwFlags&SpinBoxIsUpdating)) { int nVal=0; int nLen=(int)::SendMessage(pData->m_hEditWnd,WM_GETTEXTLENGTH,0,0); if (nLen>0) { if (IsUnicodeSystem()) { WCHAR* pText=new WCHAR[nLen+1]; ::SendMessageW(pData->m_hEditWnd,WM_GETTEXT,nLen+1,(LPARAM)pText); nVal=GetValueFromText(pText); delete[] pText; } else { char* pText=new char[nLen+1]; ::SendMessage(pData->m_hEditWnd,WM_GETTEXT,nLen+1,(LPARAM)pText); nVal=GetValueFromText(A2W(pText)); delete[] pText; } } ::SendMessage(pData->m_hSpinWnd,UDM_SETPOS32,0,nVal); if (!(pData->m_dwFlags&DontSendNotifications)) ::SendMessage(::GetParent(hWnd),WM_COMMAND,MAKEWPARAM(::GetWindowLong(hWnd,GWL_ID),DTXN_CHANGE),(LPARAM)hWnd); } break; } break; } break; case WM_NOTIFY: if (((LPNMHDR)lParam)->idFrom==IDC_RELATIVEDATESPIN && ((LPNMHDR)lParam)->code==UDN_DELTAPOS) { LPNMUPDOWN pUD=(LPNMUPDOWN)lParam; int nNewPos=pUD->iPos+pUD->iDelta; if (nNewPos<0) { pUD->iDelta=-pUD->iPos; nNewPos=0; } pData->m_dwFlags|=SpinBoxIsUpdating; //::SendMessage(pData->m_hEditWnd,WM_SETTEXT,0,(LPARAM)szEmpty); pData->SetRelativeDate(nNewPos,DTXF_NOSPINCHANGE|DTXF_NOMODECHANGE); pData->m_dwFlags&=~SpinBoxIsUpdating; if (!(pData->m_dwFlags&DontSendNotifications)) ::SendMessage(::GetParent(hWnd),WM_COMMAND,MAKEWPARAM(::GetWindowLong(hWnd,GWL_ID),DTXN_CHANGE),(LPARAM)hWnd); } else if (((LPNMHDR)lParam)->idFrom==IDC_EXPLICITIDATE && ((LPNMHDR)lParam)->code==DTN_DATETIMECHANGE) { if (!(pData->m_dwFlags&DontSendNotifications)) ::SendMessage(::GetParent(hWnd),WM_COMMAND,MAKEWPARAM(::GetWindowLong(hWnd,GWL_ID),DTXN_CHANGE),(LPARAM)hWnd); } break; case DTXM_SETRELDATE: // wParam is new pos, lparam contains flags (DTXF_*) pData->SetRelativeDate((int)wParam,(DWORD)lParam); break; case DTXM_GETRELDATE: return pData->GetRelativeDate(); case DTXM_GETCLASS: return (LRESULT)pData; case DTXM_CHANGEMODE: pData->ChangeMode((BOOL)wParam); break; case DTXM_GETMODE: return pData->GetMode(); case WM_SETFOCUS: if ((pData->m_dwFlags&ModeMask)==ModeExplicit) ::SetFocus(pData->m_hTimePickerWnd); else { ::SetFocus(pData->m_hEditWnd); ::SendMessage(pData->m_hEditWnd,EM_SETSEL,0,-1); } return 0; } return DefWindowProc(hWnd,msg,wParam,lParam); }