|
Check out CodeProject code section.
http://www.codeproject.com/file/cppfilesdragdrop.asp
Kuphryn
|
|
|
|
|
|
Hi, I'm writing an international application, and therefore, I need to display dates and times using the user-locale. When I go to: Control Panel->Regional Settings->Regional Options tab->customize->Date tab, I see TWO date formats: SHORT and LONG.
Now, I write the following lines in my code:
COleDateTime date;
date.SetDate(2003,10,23);
CString s = date.Format((DWORD)VAR_DATEVALUEONLY); // format the date only
When I display 's', the contents of 's' are the SHORT version of the date, as it is configured in the dialog mentioned above.
My question is : how does COleDateTime know to choose the SHORT version and not the LONG version? Is it configurable through code? The reason I'm asking, is that later on I need to use the same string in order to populate another COleDateTime object, using the COleDateTime::ParseDateTime method, and I have to be sure that the method will work. As far as my tests went, ParseDateTime FAILED when given a LONG date string, so I have to be absolutely sure that COleDateTime::Format will ALWAYS use the SHORT date. And if possible, issue some command to ensure this.
Any ideas? Thanks.
/=/=/=/=
Deus
/=/=/=/=
|
|
|
|
|
It might have something to do with the VT_DATE type being used by COleDateTime .
Five birds are sitting on a fence.
Three of them decide to fly off.
How many are left?
|
|
|
|
|
Can you please explain what you mean? As far as I know, the VT_DATE is the only date-related variant type... it's not like there's a VT_LONGDATE or something like that... how do I know that VT_DATE is associated with the short date-time version?
/=/=/=/=
Deus
/=/=/=/=
|
|
|
|
|
Why don't you use COleDateTime::Format(_T("%m/%d/%Y")); ?
|
|
|
|
|
Because the application must be internationalized, that is, culture and language sensitive. If the user uses a locale that presents dates as YYYY-MM-DD (as in Japan, for example), I cannot force a different date format on him.
/=/=/=/=
Deus
/=/=/=/=
|
|
|
|
|
ParseDateTime is meant to work in all cases (well that's according to the documentation) and I think you can use Format(_T("%x")) or %#x to get short or long format to select the short or long format...
|
|
|
|
|
thanks! I haven't noticed these tokens...
/=/=/=/=
Deus
/=/=/=/=
|
|
|
|
|
Instead of using VAR_DATEVALUEONLY , maybe you can use GetLocaleInfo using either LOCALE_SLONGDATE or LOCALE_SSHORTDATE to return the locale-formatted string, and use that in COleDateTime::Format() .
I've never tried this personally, but I have something similar that does work.
HTH
The kindest thing you can do for a stupid person, and for the gene pool, is to let him expire of his own dumb choices.
[Roger Wright on stupid people]
We're like private member functions
[John Theal on R&D]
We're figuring out the parent thing as we go though. Kinda like setting up Linux for the first time ya' know...
[Nitron]
|
|
|
|
|
I am using Internetdial function of Wininet in Visual C++ 6.0 to get an Internet connection via a GPRS-Modem. Would it be possible to disable the Dial-Up Connection dialog box when using the Internetdial function?
Thanks in advance!
StefanJ
|
|
|
|
|
I have a dialog with a button and a progressbar. When the user clicks the button a lengthy process is initiated. During this process I want to increment the progressbar on a regular interval. I did this by setting a timer when the button is clicked, but the OnTimer function is never called. However it is called when I set the timer in the OnInitDialog function.
It seems that the lengthy process that is initiated in the 'OnMyButtonClicked' function blocks the timer. Anyone knows a sollution for this problem?
|
|
|
|
|
you need to have event pumped into your lenghty process.
I thing there are samples here on code project, have a look around.
Maximilien Lincourt
"Never underestimate the bandwidth of a station wagon filled with backup tapes." ("Computer Networks" by Andrew S Tannenbaum )
|
|
|
|
|
Brian van der Beek wrote:
When the user clicks the button a lengthy process is initiated.
Do this lengthy progress in a worker thread. Have this worker thread send PostMessages to its parent(View), which in turn sets the Progress bar.
For threads, I recommend this article.[^]
[edit] You can also use a message pump as suggested (code is in the Prosise-book), but that tends to get complicated.
Who is 'General Failure'? And why is he reading my harddisk?!?
|
|
|
|
|
I now use a worker thread and everything works fine. Thanks for your reply.
|
|
|
|
|
Brian van der Beek wrote:
I now use a worker thread
You did this within 20 minutes?
Wow - you code pretty fast!
Who is 'General Failure'? And why is he reading my harddisk?!?
|
|
|
|
|
In Win32 you should use a worker thread to handle lengthy processes in the background so that normal message passing can continue.
If you do not want to use a worker thread then you will need to to use one of the old tricks used before mult-threading.
1) Use some thing like this
if( PeekMessage(...) ) // in lengthy process loop
{
DispatchMessage(...)
}
to allow other messages to be processed.
OR
2) Use a user defined message that you keeping posting to your self until the job is fininish. There by allowing other messages to flow. This works as follows:
PostMessage(MY_MESSAGE); // Get processing started
...
Proc(MY_MESSAGE)
{
swicth(message)
{
case MY_MESSAGE:
// do part of processing
if( !done )
PostMessage(MY_MESSAGE);
break.
}
Both of the above method will increase the amount of time it take to do the lengthy process, but they both work to solve your problem.
I hope this give you some ideas as to how to solve your problem.
INTP
|
|
|
|
|
I have a dialog with a button and a progressbar. When the user clicks the button a lengthy process is initiated. During this process I want increment the progressbar on a regular interval. I did this by setting a timer when the button is clicked, but the OnTimer function is never called. However it is called when I set the timer in the OnInitDialog function.
It seems that the lengthy process that is initiated in the 'OnMyButtonClicked' function blocks the timer. Anyone knows a sollution for this problem?
|
|
|
|
|
I am not sure if this will help, but does this "lengthy process" have a DO/FOR/WHILE loop? If so the task is fairly straight forward. Here is an example of a ProgressBar function:
void CMyDialog::ProgressBar()
{
int percentage=0; //variable initialisation
char temp[100]; //
//The following line will calculate the Progress bar percentage
//The "Records" is a global UINT which increments each time through the loop
//The "TotalRecords" is the total number of Records in the loop
percentage=(int)(((float)Records/(float)TotalRecords)*100.0);
//"m_Progress" is the variable attached to your dialog
//This will set the position of the progress bar depending on the percentage
m_Progress.SetPos(percentage);
//This will update the "m_Progress" variable with the new position
UpdateData(FALSE);
}
Call this function every time you wish to update the progress bar.
Dont forget to update the "Records" variable before calling this function.
Hope this helps.
|
|
|
|
|
Have tried a lot of logging techniques (log to .txt and so on)
Anyone got a easy and good way?
APe
|
|
|
|
|
|
Hi,
How do I append a text in a edit box. I tried various methods, but they could just overwrite the previous line ,but couldnt append..
Any suggestions?
Thanks
Deepak Samuel.
|
|
|
|
|
CString str;
editvar.GetWindowText(str);
str+="appended text";
editvar.SetWindowText(str);
Thats it!!
Cheers
Muhammad Shoaib Khan
http://geocities.com/lansolution
|
|
|
|
|
I think what you want is something like:
SendMessage(hWnd, EM_SETSEL, -1, -1);
SendMessage(hWnd, EM_REPLACESEL, Undo, Text);
Five birds are sitting on a fence.
Three of them decide to fly off.
How many are left?
|
|
|
|
|
I am not so familiar with VC++ and I am facing a problem that seems too easy to professionals.
I have created a dialog based application with VC++ wizard but on the taskbar only the button for the first dialog is displayed. If I try to add more dialogs and their related dialog classes into the project, they do not have their own taskbar button so I do have to use alt+tab to swap among the dialogs. Any ideas?
|
|
|
|