Windows 9x系だと EM_GETSEL がUnicode系で動作しない件
Windows 9x 系で SendMessageW(hWnd,EM_GETSEL,0,0)を実行すると、SendMessageAと同じ値が 帰ってきてしまうような…。
というわけで、対応させるコードを書いてみた|・ω・)ノ
int EM_GETSELW(HWND hWnd,int *i,int *j){ int k,l,m,n,m2,n2,ret; wchar_t pszUnicode[4],*pos; char pszMBCS[4]; int nLen; ret=SendMessageW(hWnd,EM_GETSEL,(WPARAM)&m,(LPARAM)&n); SendMessageA(hWnd,EM_GETSEL,(WPARAM)&k,(LPARAM)&l); if(m==k&&n==l) { ret=GetWindowTextLengthW(hWnd); pos=new wchar_t[ret+1]; if(pos==NULL)return -1; GetWindowTextW(hWnd,pos,ret+1); for(m=n=0,m2=n2=-1;pos[m];m++,n+=lstrlenA(pszMBCS)){ if(n==k)m2=m; if(n==l)n2=m; lstrcpynW(pszUnicode,pos+m,2); pszUnicode[1]=0; nLen = ::WideCharToMultiByte(CP_THREAD_ACP, 0, pszUnicode, 1, NULL,0, NULL, NULL ); if(nLen>0){ nLen = ::WideCharToMultiByte(CP_THREAD_ACP, 0, pszUnicode, 1, pszMBCS,nLen, NULL, NULL ); if(nLen>0)pszMBCS[nLen]=0; } else *(short int*)pszMBCS=L' '; } if(n==k)m2=m; if(n==l)n2=m; ret=(m2&0xffff)|(n2<<16); delete []pos; if(i)*i=m2; if(j)*j=n2; } else{ if(i)*i=m; if(j)*j=n; } return ret; } |
|・ω・)これで、Win9x系のもふったーの選択テキストの不具合が直るのだ
Comments