|
Hey, you are the best! Thank you so much, Daniel. My code is finally working!!!!!!
I shall call TranslateTransform() first before calling RotateTransform().
Still, don't know why this doesn't make a difference when drawing the ellipse though... but hey, who cares now... hee hee...
|
|
|
|
|
It is my first time here asking for help, and I had a very happy experience. All you guys are great! Thank you all.
Best wishes to you all.
|
|
|
|
|
I don't know which forum to post this, but since I'm a C++ developer and this forum is the most frequented, I post it here.
I have put the following lines to make mc generate a message table for 3 locales:
;
LanguageNames=(English=0x409:MSG0409)
;
LanguageNames=(EnglishCA=0x1009:MSG1009)
;
LanguageNames=(FrenchCA=0xC0C:MSG0C0C)
My problem is that the MS Message compiler (mc) don't output accented characters correctly. Here is an example entry:
MessageId=100
Severity=Success
Facility=Itf
SymbolicName=MSG_APPSTART
Language=English
Service has started successfully.
.
Language=EnglishCA
Service has started successfully.
.
Language=FrenchCA
Le service a démarré avec succès.
.
When I want to get the message using FormatMessage , I get the following when specifying 0x0c0c as the language:
Le service a dTmarrT avec succFs.
As one can see, the accented characters are messed up. Here is a snippet of the MSG0C0C.bin file outputted by mc:
L L e s e r v i c e a d ˜m a r r ˜ a v e c s u c c ¦s
letters above have a space between them, except for the one where should have been the accented characters.
I can't find anything in MSDN about message compiler an internationalization that explains how to make mc recognize foreign chars correctly, or how to put them in the .mc file.
Tx for your help.
Michel
It is a lovely language, but it takes a very long time to say anything in it, because we do not say anything in it, unless it is worth taking a very long time to say, and to listen to.
- TreeBeard
|
|
|
|
|
I got some modeless dialogs.
I set the tab order for them.
But:
Tab does not work. Everytime I hit at the Tab-Key a sound is heared and nothing else happens.
If I call the same dialog modal the tab works as usual.
Can anyone give me a hint who to aktivate the tab functionality?
|
|
|
|
|
In your message loop you need to make a call to IsDialogMessage if the HWND is your Dialog. If your window is not a dialog, then call Translate and DispatchMessage like normal.
If your dialog message is processed by IsDialogMessage, then you do not need to Dispatch it because this function does that.
Coincidentally if you have a function that is not a dialog, but does have a set of controls that you would like to tab through, you can dispatch your messages to that window with IsDialogMessage as well.
Good Luck
Build a man a fire, and he will be warm for a day Light a man on fire, and he will be warm for the rest of his life!
|
|
|
|
|
Hi,
I have a multi-threaded application and have the following problem, which I am not sure how to solve.
I have 2 threads running. The 1 thread I would like to SUSPEND or place in SLEEP mode. This is so that I can give the processor a chance to do other things. This thread I only need to work every half an hour.
If I place the thread in Sleep, I cannot get it out of that mode until the Sleep ends.
Also if I should need to kill the thread and it is in sleep, I am going to have to wait a half an hour ( at the most) before the thread dies.
How do I manage this?
Thanks in advance for any ideas.
Regards
Rui
|
|
|
|
|
Ruca wrote:
If I place the thread in Sleep, I cannot get it out of that mode until the Sleep ends.
You shouldn't be using Sleep for this. You have three choices:
1. The most complicated, but more elegant and powerful: Use WaitForSingleObject and use an event object with the timeout value being the Sleep period
2. I do not recommend, but easier: Use SuspendThread from the thread 2 for suspending thread 1. Then set some bool and ResumeThread for resuming the execution.
3. The most horrible: If the program is terminating, you can use TerminateThread
My latest articles:
XOR tricks for RAID data protection
Win32 process suspend/resume tool
|
|
|
|
|
You could also use a timer catching the WM_TIMER message. To make the trade terminate, send it the WM_QUIT message, which it will also catch.
Michel
It is a lovely language, but it takes a very long time to say anything in it, because we do not say anything in it, unless it is worth taking a very long time to say, and to listen to.
- TreeBeard
|
|
|
|
|
|
The suggestion is NOT to use Sleep, because it is blocking, so you are unable to tell the thread to cleanup and quit.
The use of either WaitForSingleObject with a 1800000 milliseconds time-out or SetTimer and catching the WM_TIMER and WM_QUIT messages is better.
Michel
It is a lovely language, but it takes a very long time to say anything in it, because we do not say anything in it, unless it is worth taking a very long time to say, and to listen to.
- TreeBeard
|
|
|
|
|
A console application in debug mode, using STL:
#include "stdafx.h"
#include <iostream.h>
#include <vector>
using namespace std;
typedef vector<int> intvector;
struct S
{
intvector v;
};
int main(int argc, char* argv[])
{
S *pS=new S;
intvector::iterator it;
cout<<"before crush"<<endl; <code>
for (it=pS->v.begin(); it!=pS->v.
end(); it++);
delete pS;
return 0;
}
If i run it step by step it will crush on the attempt of executing the for line. If i modify it like this:
for (it=pS->v.begin(); it!=pS->v.end(); it++); and repeat the step by step procedure, everything will be ok.
Could you tell me what is the difference between the two variants?
This message is related to the one i wrote yesterday. I thank everyone who sent me answers. I still think it was not about memory...
rechi
|
|
|
|
|
Hmmm... Don't know if it helps, but I think this is a compiler bug.
1. In VS.NET I compile it and run it fine
2. In VC++ 6.0 the whole MSDEV crashes and exit! I never saw this!
3. I've changed your code to this, for spotting the error:
int main(int argc, char* argv[])
{
S *pS=new S;
intvector::iterator it = pS->v.begin();
cout<<"before crush"<<endl;
while (it!=pS->v.end())
it++;
delete pS;
return 0;
}
And it works fine, even on VC 6.0!
I'm using SP5 of VS 6.0.
My latest articles:
XOR tricks for RAID data protection
Win32 process suspend/resume tool
|
|
|
|
|
Daniel Turini wrote:
I think this is a compiler bug
That's the point (on VC 6.0). Unfortunately, it took me a day to find out.
Thanx for your suggestions!
rechi
|
|
|
|
|
I've been wrestling with this one for four days now. Time to ask the experts...
I'm trying to run an application as Administrator... My app is supposed to have the functionality of Linux' SU...
Im trying to do this with CreateProcessAsUser, which spits out error 1314, meaning something like "missing client privilige."
I believe those privileges refer to those of the calling process, whose lacking SE_ASSIGNPRIMARYTOKEN_NAME privilege. When I try to assign that one, using a method that uses AdjustTokenPrivileges, that one spits out error 1300, "haven't assigned your privilege". Errors 1300 and 1314 are the only errors spit out.Some other notes: The assure method is a debug routine, it does not interfere anywhere... That's not really my admin password, mine is trice as long and quadruple complex Besides SetPrivilege and CreateProcessAsUser no functions called return an error...
What's going wrong? What should I change? Comments, suggestions, questions and URL's are welcome... BTW, I've got working SU code using the largely undocumented CreateProcessWithLogon fucntion, but this one doesn't work in NT 4.0, which is where this code should work...
The code:
<br />
STARTUPINFO *si = (STARTUPINFO *)allocm(sizeof(STARTUPINFO));<br />
PROCESS_INFORMATION *pi = (PROCESS_INFORMATION *)allocm(sizeof(PROCESS_INFORMATION));<br />
si->cb = sizeof(STARTUPINFO);<br />
<br />
LogonUser(<br />
"Administrator", <br />
".",<br />
"09nnj!ty&56t",<br />
LOGON32_LOGON_INTERACTIVE,<br />
LOGON32_PROVIDER_DEFAULT,<br />
&hToken <br />
);<br />
assure("LogonUser");<br />
<br />
OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken2);<br />
assure("OpenProcessToken");<br />
<br />
DuplicateTokenEx(<br />
hToken,<br />
TOKEN_ALL_ACCESS,<br />
NULL,<br />
SecurityImpersonation,<br />
TokenPrimary,<br />
&hToken3<br />
);<br />
assure("DuplicateToken");<br />
<br />
ImpersonateLoggedOnUser(hToken3);<br />
assure("ImpersonateLoggedOnUser");<br />
<br />
SetPrivilege(hToken2,SE_INCREASE_QUOTA_NAME,true);<br />
assure(SE_INCREASE_QUOTA_NAME);<br />
<br />
SetPrivilege(hToken2,SE_ASSIGNPRIMARYTOKEN_NAME,true);<br />
assure(SE_ASSIGNPRIMARYTOKEN_NAME);<br />
<br />
CreateProcessAsUser(<br />
hToken3,<br />
NULL,<br />
"Taskmgr",<br />
NULL,<br />
NULL,<br />
0,<br />
CREATE_DEFAULT_ERROR_MODE |<br />
NORMAL_PRIORITY_CLASS,<br />
NULL,<br />
NULL,<br />
si,<br />
pi<br />
);<br />
assure("CreateProcessAsUser");<br />
Regards,
Georg Haan (.NL)
|
|
|
|
|
|
Thanks for your comment, but there must be a way to use impersonation functions without upgrading to a (local) service? ImpersonateLoggedOnUser works fine by the way, and the RCMD example Mr. Saurwein refers (see next message) to doesn't upgrade itself to service neiter...
Regards,
Georg Haan(.NL)
|
|
|
|
|
The RCMD sample from the SDK shows how to do it:
if(!OpenThreadToken(
GetCurrentThread(),
TOKEN_DUPLICATE,
TRUE,
&hImpersonationToken
))
{
DisplayLastError("OpenThreadToken");
goto cleanup;
}
if(!DuplicateTokenEx(
hImpersonationToken,
TOKEN_IMPERSONATE | TOKEN_READ |
TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE,
NULL,
SecurityImpersonation,
TokenPrimary,
&hPrimaryToken
))
{
DisplayLastError("DuplicateTokenEx");
goto cleanup;
}
RevertToSelf();
CloseHandle(hImpersonationToken);
if(!CreateProcessAsUser(
hPrimaryToken,
NULL,
COMMANDLINE,
NULL,
NULL,
TRUE,
0,
NULL,
NULL,
&si,
&pi
))
{
DisplayLastError("CreateProcessAsUser");
goto cleanup;
}
Take a look at the flags passed to DuplicateTokenEx() and OpenThreadToken();
...if you're under 8 or younger. Chris Maunder, the Lounge
|
|
|
|
|
Again, thanks for your comment too.
I have tried the server.c you refer to already, it gives errors opening the threadtoken. A peculiar error that is, it says, "The specified token doesn't exist".
The general problem can't be due to flags, because the ALL_ACCESS flag used, symbolizes complete access including all possible flags. I use it to be sure I don't miss one...
Regards,
Georg Haan(.NL)
|
|
|
|
|
Georg Haan wrote:
I have tried the server.c you refer to already, it gives errors opening the threadtoken. A peculiar error that is, it says, "The specified token doesn't exist".
Which is pretty strange as the current threads token just HAS to exist.
Georg Haan wrote:
The general problem can't be due to flags, because the ALL_ACCESS flag used, symbolizes complete access including all possible flags. I use it to be sure I don't miss one...
Exactly this may be a reason for failures. Sometimes functions may fails because you are requesting more than you are privileged to do.
Always follow the principle of the least privileges. Never ask more than you need. If you open a file for reading for which you have only read privileges, requesting all access, the function will fail although you really would have access to read it. But, greedy as you are, you are asking for more.
...if you're under 8 or younger. Chris Maunder, the Lounge
|
|
|
|
|
Again, thanks for your quick response...
Andreas Saurwein wrote:
Which is pretty strange as the current threads token just HAS to exist.
Peculiar is another way of saying pretty strange...
The peculiarity of the error is why I posted my message on CodeProject...
Andreas Saurwein wrote:
Exactly this may be a reason for failures. Sometimes functions may fails because you are requesting more than you are privileged to do.
You are right. But the functions in which I request ALL_ACCESS do not generate an error, therefore I must be being granted full access... The trouble starts when some functions (CreateProcessAsUser, AdjustTokenPrivileges) imply I have too little access...
Andreas Saurwein wrote:
But, greedy as you are, you are asking for more.
A friendly word of advice: Don't be too quick on judgements like that, nor too generous with such statements...
Regards,
Georg Haan(.NL)
|
|
|
|
|
Georg Haan wrote:
A friendly word of advice: Don't be too quick on judgements like that, nor too generous with such statements...
Sorry, I didnt mean this as insult but rather jokingly on the ALL_ACCESS thing.
...if you're under 8 or younger. Chris Maunder, the Lounge
|
|
|
|
|
Hi,
I ve read into an article (Q186120) of microsoft knowledge base, which explain how to fill a range with an array. But when i test it , it doesn't work really well. In fact, i don't realy understand how works the function called in the sample GetResize(), because when i test my application (which is based on the application described in the article, but which can't fill cells with string element)which simply have to fill some excel's range with the figure "1", and when i run my application it just fill the cell "A1"!
Why?
Thanks in advance for your answer
gerald
|
|
|
|
|
The sample detailed in Q186120 works perfectly well. I have just tested it with Excel 97.
She's so dirty, she threw a boomerang and it wouldn't even come back.
|
|
|
|
|
Hi,
... I have my ATL ActiveX control, when I want to edit the properties of that ActiveX in Ms Word, I have to go to properties, and then press "custom" to have my properties dialog.
... But... What I have seen is that a control like "Calendar Control", adds properties to the Ms Word properties grid... how did they do that ???, how can I do that ?...
Thanks in advance, greetings
Braulio
|
|
|
|
|
hi
how can i fetch the harddisk serial number not harddisk volume serial number using MFC, WIN32API,C,C++ program. And where it is stored in the system. any professionals know please help me
thank you
from
venu
|
|
|
|
|