|
|
I wrote MFC app that required displaying Unicode text in RichEdit and other Unicode stuff. I used VC7 and Unicode version of MFC. Under WinNT/XP all works fine. Is it possible to use Microsoft Layer for Unicode to avoid special adaptation of that app for Win9x/Me? I followed the instructions in MSDN, but my App still doesn’t work under Win9x, its main window does not appear. It seems to me my app has Unicode version of WinMain. How Layer for Unicode treat all this?
|
|
|
|
|
hi,
Win 9x does not support unicode itself, you must re-write the unicode functions yourself, and all functions/class export the normal char in stead
w-char but Inside in your own class/functions w_char could be used....
i think it is very hard to make your program real unicode support for win'9x
(perhaps you make a special resource file for translated texts,
win'9x has a good support of russian/baltic/other east-european languagues it self, but Asian Languages like chinese / japanese / koreoan / sanskriet is very poor)
dan o
|
|
|
|
|
Now i have another problem!
How can i display images in the picture control by pressing the same button?
i mean if i press the button once a bitmap to be displayed,if i press the button again another bitmap to be displayed..
Thanks again!
|
|
|
|
|
Maybe you can use Davide Calabro's CButtonST v3.8 (MFC Flat buttons)[^], which allows for what you want and much more.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
As I understand you want to change the bitmaps of the control on clicking a button.
You may do this by storing the bitmaps in HBITMAP array and sending the STM_SETIMAGE on each click after changing the bitmaps array counter.
This code may illustrate.
HBITMAP hBitmaps[4];
int index = 0
.
.
.
case IDC_YOURBUTTON:
index++;
index = index < 4 ? index : 0;
HWND hWnd = ::GetDlgItem(hDlg, IDC_MYPICTURE);
::SendMessage(hWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmaps[index]);
.
.
.
note that we do not delete the current bitmap in the control as in the last post becaues we want to preserve the bitmaps to continue the switching.
|
|
|
|
|
Is there a way to split a CString as you can in Perl?
Need to find a way to take a string and split it based on a delemiter.
for example if I have a string that looks like
c:\data\moredata\evenmoredata\datafile.dat
I need to be able to split "datafile" from the string. Since the open file Dialog supports multiple selections I can't use .GetFileTitle();
Any ideas?
|
|
|
|
|
|
Hello there,
Use CString's ReverseFind(..) function to get the position of the first backslash starting the search from the end of the string then use the Right(..) function to extract the datafile.dat name. If you don't want the extenstion you could use the Reverse find funcion again on the initial string and use the Mid(..) function to extract the name between the last backslash and the period.
Alternatively you could have called CString's GetBuffer(..) on the string and tokenize the result it using strtok() or some other low lever function. I would advise the first approach.
Art
|
|
|
|
|
I Looked over MSDN information on both ReverseFind() and strtok() before you posted this information. I did not really understand the ReverseFind() function when I first read the information, and ended up implementing strtok() to do the work, however the code that I am using to do it looks rather nasty.. but it works.. however I will look more into ReverseFind() and see if I can implement this for hopefully cleaner code.
Thank you very much for the information.
|
|
|
|
|
Here you are:
CString sPath(_T("c:\\data\\moredata\\evenmoredata\\datafile.dat"));
int nPos1 = sPath.ReverseFind('\\');
int nPos2 = sPath.ReverseFind('.');
if(nPos1 > -1 && nPos2 > -1)
{
CString sFile = sPath.Mid(nPos1+1, nPos2 - nPos1 -1);
AfxMessageBox(sFile);
}
-----------------
The ReverseFind fn just searches the string starting from the end toward the beginning and stops when it encounters the character it is looking for. The position it reports is referenced from the beginning of the string.
Art
|
|
|
|
|
Hi fellow experts, I got stuck by the following errors:
1, ::GetUserNameEx , this function, as MSDN stated, is declared in Secext.h, but after I included Secext.h I got a whole truck of compiler errors, all of which are located in Secext.h. For example:
d:\ms visual studio\vc98\include\secext.h(22) : error C2146: syntax error : missing ';' before identifier 'UserName'
d:\ms visual studio\vc98\include\secext.h(22) : error C2501: 'SECURITY_STRING' : missing storage-class or type specifiers
d:\ms visual studio\vc98\include\secext.h(22) : error C2501: 'UserName' : missing storage-class or type specifiers
d:\ms visual studio\vc98\include\secext.h(23) : error C2146: syntax error : missing ';' before identifier 'LogonDomainName'
d:\ms visual studio\vc98\include\secext.h(23) : error C2501: 'SECURITY_STRING' : missing storage-class or type specifiers
d:\ms visual studio\vc98\include\secext.h(23) : error C2501: 'LogonDomainName' : missing storage-class or type specifiers
d:\ms visual studio\vc98\include\secext.h(24) : error C2146: syntax error : missing ';' before identifier 'LogonServer'
d:\ms visual studio\vc98\include\secext.h(24) : error C2501: 'SECURITY_STRING' : missing storage-class or type specifiers
d:\ms visual studio\vc98\include\secext.h(24) : error C2501: 'LogonServer' : missing storage-class or type specifiers
d:\ms visual studio\vc98\include\secext.h(33) : error C2146: syntax error : missing ';' before identifier 'GetSecurityUserInfo'
2, ::ListView_SortItemsEx , this function, as MSDN stated, is declared in commctrl.h, but after I included commctrl.h the compiler still says ListView_SortItemsEx is an "undeclared identifier".
How can I solve those? Thanks a lot.
|
|
|
|
|
|
I'm using STL vector to store file names as I retrieve them from FindNextFile() but when I try to access different locations in the vector, they all return the last file added. Am I storing or accessing incorrectly?
<br />
vector<char *> file_names;<br />
<br />
HANDLE Hnd;<br />
WIN32_FIND_DATA WFD;<br />
<br />
Hnd = FindFirstFile( "*.175", &WFD);<br />
file_names.push_back(WFD.cFileName);<br />
int i=0;<br />
while ( FindNextFile( Hnd, &WFD) ) {<br />
file_names.push_back(WFD.cFileName);<br />
cout << file_names[i] < endl;
i++;<br />
}<br />
for(int i=0; i <=file_names.size(); i++) {<br />
cout << file_names[i] << endl;<br />
cout << file_names.at(i) << endl;<br />
}<br />
<br />
vector <char *>::iterator f;<br />
for ( f = file_names.begin(); f != file_names.end(); f++)<br />
cout << *f << endl;<br />
|
|
|
|
|
The vector holds a set of pointers.
One solution is to copy the actual file name to a string container and then store it in the vector.
Kuphryn
|
|
|
|
|
kiken wrote:
file_names.push_back(WFD.cFileName);
Think about what that is doing. It's storing the address of the cFileName array over and over. You need to store copies of each name as they are returned. One way to do that is to use a vector<string>
--Mike--
The Internet is a place where absolutely nothing happens.
-- Strong Bad
1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
Hi
I have a simple problem regarding toolbars here.
When we create a new SDI project, the codes for the standard toolbar is there. The toolbar will appear and disappear gracefully when we check the function inside the menu. But when i add a new toolbar, how do i make it appear and disappear gracefully ??
I try to use the "ShowWindow(SW_HIDE)" but the ugly gray patch is still there!
Thanx you for ur kind attention !!
bk
|
|
|
|
|
not sure what you are you are describing but the code below seems to work for me.
m_wndMyToolBarName.ShowWindow(SW_HIDE);
RecalcLayout();
|
|
|
|
|
Hi ROK
Really thanx a lot !! Meanwhile i also found another method using
ShowControlBar(&m_WndToolBar, true, false);
bk
|
|
|
|
|
Thanks bk.. Never really had to hide a toolbar in an app before.. so my previous post was the first thing I came up with that worked.. thnks for posting the correct way.
|
|
|
|
|
Let Suppose I have a Frame Window
and this frame is split into to panes
now in each pane is another frame.
How do I get the top level menu to route message commands to the other two frames? I can use classwizard all day long to create message ID's in the other two frames.. but no matter how hard I press that left mouse button.. the message is never delivered.
|
|
|
|
|
Look in the MSDN for OnCmdMsg(). It takes care of command routing. Override it to give your sub-frames a look at the messages before processing them in the normal way.
he he he. I like it in the kitchen! - Marc Clifton (on taking the heat when being flamed)
NEW: Awasu 1.0[^]: A free RSS reader with support for Code Project.
|
|
|
|
|
From article:
http://www.codeproject.com/dll/plug-in.asp#xx88311xx
Serialize problem only appear with VC7.0,it works fine with vc6.0.
I have been somewhat successful in trying to implement serialization for my test app. I am using a CList template to store objects. Here are a few
details...
Serialization works just fine for documents saved and reloaded during a given session. This includes data stored in dialog resources. This is as long as I serialize the list then walk through the list, serializing each list object.
However, Serialization fails after closing the session and then reopening. In general, I am given only the {DllProxy} class (where I should be getting my dll's runtime class instead) and all other vars are mud.
I AM able to successfully serialize save/load a list of the DLLProxy "pointers" themselves with great fidelity. But the Plug_Object "pointers" that they originally created are lost from session-to-session.
Thanks and Best Regards
|
|
|
|
|
If I am right, you doing a mod of my article. If you can it would be best if you could send a copy of the offending code to me to have a look at. If you do, try and keep it as minimal as possible, so that it just illustraits the problem.
The only other issue is that I work with VC 6 only, so if its dieing in VC7 only, I may not be able to spot/replicate the problem.
Roger Allen
Sonork 100.10016
Were you different as a kid? Did you ever say "Ooohhh, shiny red" even once? - Paul Watson 11-February-2003
|
|
|
|
|
Hi all,
i have a problem with this piece of code:
bool CBaseWin::createWin()
{
//Create the application's window
m_hWnd = CreateWindow(m_pAppName,
m_pAppTitle,
WS_OVERLAPPEDWINDOW,
50,
50,
500,
500,
NULL,
NULL,
m_hInstance,
this);
return (m_hWnd != NULL);
}
m_hWnd will always be 0 if i include the "this" pointer as the last parameter, if i substitute NULL for it, it will work and return a value for m_hWnd.
This is from the tutorial located here:
http://www.codeproject.com/useritems/win32windowwrapperclass.asp
Can anyone explain why the inclusion of the "this" pointer causes CreateWindow to fail?
PS. The error code is 1400 - which is invalid window handle.
Regards,
Skute
|
|
|
|