|
Hmmm. Is this Managed C++, by any chance? I'm just curious. I write 'unmanaged' C++, and have never seen this behavior at runtime.
Software Zen: delete this;
|
|
|
|
|
|
From the compiler documentation, /RTC switch:
[quote]
/RTCu
Reports when a variable is used without having been initialized. For example, an instruction that generates C4701 may also generate a run-time error under /RTCu. Any instruction that generates C4700 will generate a run-time error under /RTCu.
However, consider the following code fragment:
int a, *b, c;
if ( 1 )
b = &a;
c = a; // no run-time error with /RTCu
If a variable could have been initialized, it will not be reported at run time by /RTCu. For example, after a variable is aliased through a pointer, the compiler will not track the variable and report uninitialized uses. In effect, you can initialize a variable by taking its address. The & operator works like an assignment operator in this situation.
[/quote]
[edit] Made attribution clearer. [/edit]
|
|
|
|
|
|
Hi,
I'm trying to make a program in C++ that calculates and prints all the potential partitions of a group of n elements to groups of k elements (n is a integer multiplicate of k).
For example if n=4, k=2 :
{{a1,a2}, {a3,a4}}
{{a1,a3}, {a2,a4}}
{{a1,a4}, {a2,a3}}
I really need an algorythm about this so if you have a suggestion or if you know any links about Discrete Mathematics Algorythms i would appreciate it.
(Sorry if my English are bad)
Paparia Mantoles!
|
|
|
|
|
is this really a math problem?
Don't try it, just do it!
|
|
|
|
|
I derived a class from CListBox. In that class I added a handler for the right mouse button. When I click the right button, the menu pops up on my desktop. I know why its doing this, because the CPoint passed to the function is relative to the whole screen, not my listbox.
I cant figure out how to tell the menu to popup where my mouse is.
I tried ScreenToClient() but it didnt work.
<br />
void CMyListBox::OnRButtonUp(UINT nFlags, CPoint point) <br />
{<br />
CMenu Menu;<br />
Menu.LoadMenu(IDR_POPUP_MENU);<br />
CMenu *Popup = Menu.GetSubMenu(0);<br />
ScreenToClient(&point);<br />
Popup->TrackPopupMenu(TPM_LEFTBUTTON|TPM_RIGHTBUTTON|TPM_LEFTALIGN, <br />
point.x, point.y, this, NULL);<br />
Menu.DestroyMenu();<br />
}<br />
Anybody help?
Thanks!
|
|
|
|
|
The point is given to you in client coords, and TrackPopupMenu() expects screen coords, so use ClientToScreen() to convert the point.
Sonork 100.11743 Chicken Little
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
Within you lies the power for good - Use it!
|
|
|
|
|
You have two problems. First, the point parameter is in window coords, not screen coords. Second, TrackPopupMenu() takes screen coords for the menu location. So you should call ClientToScreen(&point)
--Mike--
Ericahist | CP SearchBar v2.0.2 | Homepage | 1ClickPicGrabber New v2.0.1! | RightClick-Encrypt
You cannot truly appreciate Dilbert unless you've read it in the original Klingon.
|
|
|
|
|
Or you could just call
::GetCursorPos(&point);
Which will give you the current mouse position in screen coordinates
Roger Allen - Sonork 100.10016
Roger Wright: Remember to buckle up, please, and encourage your friends to do the same. It's not just about saving your life, but saving the quality of life for those you may leave behind...
|
|
|
|
|
Thanks to all of you. That worked.
|
|
|
|
|
some times MFC drives me so nuts that i use SDK procs.
CPoint cpPoint;
GetCursorPos(&cpPoint);
|
|
|
|
|
I'm trying to set a waitable timer from a CTime object. So I'm doing converstion from CTime to SYSTEMTIME then to a FILETIME and finally to a LARGE_INTEGER structure so I can pass it to SetWaitableTimer.
This compiles and runs, however my timer fires immediately every time. It's completely ignoring the time to fire on. Am I making these converstions wrong or just completely flubbing the whole thing up? I'm lost, any help would be very appreciated!!
CTime m_tNextRun(Schedule.GetNextRunTime());
SYSTEMTIME m_st_DueTime;
m_tNextRun.GetAsSystemTime(m_st_DueTime);
FILETIME m_ft_DueTime;
::SystemTimeToFileTime(&m_st_DueTime, &m_ft_DueTime);
LARGE_INTEGER m_lg_DueTime;
m_lg_DueTime.LowPart = m_ft_DueTime.dwLowDateTime;
m_lg_DueTime.HighPart = m_ft_DueTime.dwHighDateTime;
if(!::SetWaitableTimer(handles[command_timer], &m_lg_DueTime,0, NULL, NULL, 0)) {
DEBUG_LOG("CSleeperThread::run(): set waitable timer failed.");
}
::WaitForMultipleObjects(2, handles, FALSE, INFINITE);
Mike Ellertson
|
|
|
|
|
I don't see anything wrong with it. I assume you've already called CreateWaitableTimer ?
What's the return value of WaitForMultipleObjects ?
|
|
|
|
|
The return value of WaitForMultipleObjects is the index of the timer(which is what it should be).
If you look at SetWaitableTimer on MSDN the second parameter specifies the alarm date for the timer. Only thing, it's a LONG_INTEGER structure that your supposed to set using the FILETIME format.
I'm pretty sure I'm setting up this format wrong. Does anyone have a good conversion routine from a CTime object to a LONG_INTEGER used by SetWaitableTimer ? Or have any advice on setting this FILETIME format?
|
|
|
|
|
Hello,
About your article with the CSleeperThread's class and the functions :
static VOID CALLBACK TimerProc_Wrapper
VOID CALLBACK TimerProc
void ThreadMain();
void WakeUp();
How do you use those functions in the main in order to suspend the thread for 10s for example?
Thanks
Clément, french student
|
|
|
|
|
Hello,
I'm trying to *Send* a message to a Dialog Bar window early on in the initialization of an app and I believe I'm crashing because the Dialog Bar has not been created yet. How can I test to ensure it's been created and can accept & process such messages? I try to get a safe Handle (or call GetActiveWindow()), but that's valid all the time. If I change the SendMessage to a PostMessage, everything works, but I do need a SendMessage for some execution timing later in the app. Any suggestions/help?
thanks! JennyP
<code>
........
CDiagGlobalSched *gl_sched = &(((CMainFrame *)AfxGetApp()->m_pMainWnd)->m_SchedDlgBar1);
if (ForceUpdate) {
if (gl_sched->GetActiveWindow() != NULL) {
gl_sched->SendMessage(WM_COMMAND, ID_UPDATE_SCHED_BAR);
}
return TRUE;
}
</code>
|
|
|
|
|
say i have a struct like this:
<br />
<br />
typedef struct {<br />
char* text1;<br />
char* text2;<br />
...<br />
char* text25;<br />
}MYS,*PMYS;<br />
how can i access the struct like this?
<br />
PMYS pS=SomehowGetPtrToStruct();<br />
for (int i=0; i < MYS_TEXTCOUNT; i++)<br />
{<br />
char* text=pS[i];<br />
dosomething(text);<br />
}<br />
i dont want to get the items like this:
char* text=pS->text2;<br />
i also tried to do stuff like: char* text=pS+(sizeof(char*)*i); but i cant get it to work
|
|
|
|
|
If you want to use the array syntax, use an array (or a std::vector ). You could overload the [] operator for your struct if you want to obfuscate your code.
|
|
|
|
|
i dont need to use the array syntax, i just need to access the members of the struct without using the names
|
|
|
|
|
|
Message Closed
modified 20-Feb-22 19:24pm.
|
|
|
|
|
[Anders] wrote:
yeah but I tought there was some fancy way of doing it with a ptr like this char* text=pS+(sizeof(char*)*i);
No, because all you're doing is adding sizeof(char) * i to the pointer value of pS, which would be a really messed up way of accessing an array of your MYS struct. If you really want to do stuff like that, you have to learn exactly what + does in the context of a pointer.
--
Ian Darling
"The moral of the story is that with a contrived example, you can prove anything." - Joel Spolsky
|
|
|
|
|
if you really want to be nasty, you have to recast the pS pointer as a char**.
char** p = reinterpret_cast<char**>(pS) Now p[0] points to text1, p[1] to text2, etc.
However, this may be totally nonportable. If this is to work, you have to be sure that text1 is aligned with the beginning of the struct. Also, if sizeof(char*) is not the same size as the member alignment "distance", you will run into trouble.
May I suggest a totally different structure? How about using std::vector<std::string> or are you not in control of the layout of this structure and associated functions? Messing with raw pointers like that is highly error prone and will most likely give rise to late debugging session...
--
Seraphim Shock. Gold for your ears.
|
|
|
|
|
i think i have gotten it to work now, thanx (and yes i needed something nasty)
|
|
|
|