|
I am a little confused. You can not expect to read anything with a WriteFile()?
[EDIT]
Oh... I see you are trying to do the read with DeviceIoControl.. I got confused by the WriteFile part..
[/EDIT]
John
|
|
|
|
|
Sorry for the confusion. I am not sure of the answer. And it looks like it will be a difficult question to find an answer as there are not too many hits when I search the net for IOCTL_CDROM_RAW_READ.
John
|
|
|
|
|
I want to do another thing with WriteFile,
I have used ReadFile,but it can read MODE1 and MODE2 FORM1,can't read MODE2 FORM2.
So I want to read MODE2 with DeviceIOContrl and IOCTL_CDROM_RAW_READ
but there is no data in the buffer
|
|
|
|
|
I am trying to constrain the resizing of a MDIChildWnd to maintain a given aspect ratio. I am having no luck. The best I have been able to do is in the CWnd::OnSize function to look at the new size, calculate what a properly proportioned frame should be and call CWnd::SetWindowPos. I almost get what I need, it is just there is no frame around the client area. Annyone have any ideas?
|
|
|
|
|
Take a look at CWnd::OnSizing and CWnd::CalcWindowRect
John
|
|
|
|
|
I'm having some trouble with static members in my program. This is what my code looks like:
<br />
#ifndef TIMER_H<br />
#define TIMER_H<br />
class Timer<br />
{<br />
private:<br />
static LARGE_INTEGER m_lTicksPerSecond;<br />
static LARGE_INTEGER m_lTime;<br />
static LARGE_INTEGER m_lFirstTime;<br />
Timer();<br />
public:<br />
static bool Initialize()<br />
{<br />
if(QueryPerformanceFrequency(&m_lTicksPerSecond) && QueryPerformanceCounter(&m_lFirstTime))<br />
return true;<br />
return false;<br />
}<br />
static double MsSinceStart()<br />
{<br />
QueryPerformanceCounter(&m_lTime);<br />
return ((double)(m_lTime.QuadPart - m_lFirstTime.QuadPart ) / (double)m_lTicksPerSecond.QuadPart ) * 1000.0;<br />
}<br />
};<br />
#endif<br />
Or you can check it out at http://www.rafb.net/paste/results/SD400728.html (don't know if codeproject supports the formating).
Anyway, the error I'm geting is:
error LNK2001: unresolved external symbol "private: static union _LARGE_INTEGER Timer::m_lFirstTime" (?m_lFirstTime@Timer@@0T_LARGE_INTEGER@@A) on every member. The program it self is a win32 application.
Grateful for any help
|
|
|
|
|
You should define all static members in the timer.cpp file, e.g.
LARGE_INTEGER Timer::m_lTime; .
Robert-Antonio
|
|
|
|
|
I'm sorry but I can't get it to work :/
When I place LARGE_INTEGER Timer::m_lTime etc inside my .cpp file it begins to talk about redefinition errors.
If I remove LARGE_INTEGER m_lTime etc from my .h file it says 'm_lTime' : is not a member of 'Timer'.
could you write just a simple class with a static member explaining it to me?
|
|
|
|
|
Did you define m_lTicksPerSecond, m_lTime,m_lFirstTime and in your cpp file.
LARGE_INTEGER Timer::m_lTicksPerSecond=0;
LARGE_INTEGER Timer::m_lTime=0;
LARGE_INTEGER Timer::m_lFirstTime=0;
Also have you checked out this:
http://www.naughter.com/cputicker.html[^]
Removing the mfc part only takes a few seconds...
John
|
|
|
|
|
oki, I checked out the cputicker class but still can't figure out what I'm doing wrong, perhaps I'm geting blind to my code.
This is what my 2 files looks like now:
Timer.h
<br />
#ifndef TIMER_H<br />
#define TIMER_H<br />
class Timer<br />
{<br />
protected:<br />
static LARGE_INTEGER m_lTicksPerSecond;<br />
static LARGE_INTEGER m_lTime;<br />
static LARGE_INTEGER m_lFirstTime;<br />
Timer();<br />
public:<br />
static bool Initialize();<br />
static double MsSinceStart();<br />
};<br />
#endif<br />
and this is what Timer.cpp looks like:
<br />
#include "Timer.h"<br />
<br />
LARGE_INTEGER Timer::m_lTicksPerSecond = NULL;<br />
LARGE_INTEGER Timer::m_lFirstTime = NULL;<br />
LARGE_INTEGER Timer::m_lTime = NULL;<br />
<br />
bool Timer::Initialize()<br />
{<br />
if(QueryPerformanceFrequency(&m_lTicksPerSecond) && QueryPerformanceCounter(&m_lFirstTime))<br />
return true;<br />
return false;<br />
}<br />
double Timer::MsSinceStart()<br />
{<br />
QueryPerformanceCounter(&m_lTime);<br />
return ((double)( m_lTime.QuadPart - m_lFirstTime.QuadPart ) / (double) m_lTicksPerSecond.QuadPart ) * 1000.0;<br />
}<br />
and this is the error which seems relevant: error C2039: 'm_lFirstTime' : is not a member of 'Timer' (which it as you see is)
hehe, plz bare with me
|
|
|
|
|
I am not sure what the problem is. Check to make sure that your cpp file is indeed included in your project and it is compiling...
As for the link, since I saw you were trying to do some work with high resolution timers I thought the code there may save you some work...
John
|
|
|
|
|
How is LARGE_INTEGER defined? Aren't there any macros that interfere with your variable names?
The simple example of declaring static members is:
pruba.h:
class A
{
static int b;
};
pruba.cpp:
#include "pruba.h"
int A::b = 1;
Robert-Antonio
"Science is a differerntial equation.
Religion is a boundary condition."
|
|
|
|
|
Hi!
I've been programming C++ for almost 4 years now, but this one is getting me mad
if(!(bMouse4Old == bMouse4 == false))
SendInput(1, &inputMouse4, sizeof(inputMouse4));
both bMouse4Old and bMouse4 are false , but the "SendInput()" is being called nonetheless.
Why?
The statement means: "if bMouse4Old and bMouse4 are the same, namely false, do not call SendInput" (hence the "!")
thanks in advance
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Goodness knows how this will be evaluated, but I doubt it will be the way you hope.
if (bMouse4Old == false && bMouse4 == false)
is the way to go.
or perhaps
if (! (bMouse4Old && bMouse4))
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
Christian Graus wrote:
if (bMouse4Old == false && bMouse4 == false)
This is the one I would use. The original code even if it worked is much harder to read and you are not saving anything by this kind of simplification as the compiler would surely optimize this statement.
John
|
|
|
|
|
Yeah, I have a tendency to go crazy on making statements smaller, at the expense of readability. I kind of miss being able to do that in c#, there's no implicit conversion to bool a lot of the time.
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
D'oh, thanks a lot.
I was absolutely sure C++ allowes that kind of evaluation I used in my original if-statement, but the results were somewhat unpredictable
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
I think it this is happening.
(!(bMouse4Old == (bMouse4 == false)))
with == being processed like = as in
x=y=0;
I hope there isn't a lot of this stuff.
-Andy Brummer
|
|
|
|
|
In the Table "C++ Operator Precedence and Associativity",
= "Assignment" "Right to left"
== "Equality" "Left to right"
(A == B == C)
stands for
((A == B) == C)
X = Y = Z;
stands for
X = (Y = Z);
<b>Maxwell Chen</b>
|
|
|
|
|
Totally offtopic, but I have two more questions:
2) My program uses DirectInput to capture the state of the 4th and 5th mousebutton (DIMOUSESTATE2).
Depending on the state I call SendInput to map the mousebuttons to a key, thus being able to play games with 5 buttons by emulating a keypress. is there an easier way to map a mousebutton to a key? I find the SendInput way quite uncomfortable, though it works.
2) I need to save a single integer into a config file, no more, no less. Hence my program consists only of a single exe-file, I don't want to create a config file just to save the integer. Is there another way to save the integer? (I don't want to save into the registry, because when the user deletes my exe the value would stay in the registry having no function anymore)
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Regarding item 2:
a file or the registry is your only option as far as I can see. I doubt a single digit in the registry is going to make much difference, and that's what uninstall programs are for.
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
Well, you already got your answer but I will attempt to explain what's happening with your code. At first bMouse4 == false returns "true" since bMouse4 is false. Afterwards, you have bMouse4Old == true. Now the statement becomes:
if( !false )
SendInput(...)
Therefore if bMouse4Old and bMouse4 are both false then SendInput() will be called.
// Afterall, I realized that even my comment lines have bugs
If the sun were to blow up, it would take us 7-8 minutes to realize it.
|
|
|
|
|
1) Ragarding to your if block, it does work well with VC++ 6.0 on my machine. What I tested is as the below:
bool bMouse4Old = false;
bool bMouse4 = false;
if(!(bMouse4Old == bMouse4 == false))
std::cout << "SendInput(...)\n";
2) According to the Table "C++ Operator Precedence and Associativity" in MSDN,
== "Equality" "Left to right"
Thus, your code can be translated as:
a) if(!( (bMouse4Old /*false*/ == bMouse4 /*false*/) == false)) // then
b) if(!(true == false)) // then
c) if(!false) // then
d) if(true)
<b>Maxwell Chen</b>
|
|
|
|
|
I have a CListCtrl in a CFormView that represents objects. In the form view I have controls that represent data of the selected object.
When a new object is selected in the list, I need to:
1. validate the data
2. if the data is not valid, keep the original list item selected, and do not select the new item.
3. if the data is valid, then show the data of the new object.
I have added OnItemchangingX and OnItemchangedX for the list control to my form view class.
void CAddonView::OnItemchangingX(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
BOOL bValidateSuccessful = validate();
if (!bValidateSuccessful) {
--------------------------------------------------
...what do I do here to keep the old item selected
...and keep the new one from getting selected?
--------------------------------------------------
}
}
void CAddonView::OnItemchangedX(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
int iSelItem = m_listAP.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
if (iSelItem != -1 && pNMListView->uNewState & LVIS_SELECTED)
{
...load data of newly selected item...
}
} What do I need to do to keep the old selection if the validation fails?
Thanks.
--
David Hisel
Internet Business Software
|
|
|
|
|
Most likely not the best solution, but I had a similar
problem, and I just used a static variable to keep track
of the previously selected item, and after I processed what
I wanted, I updated it (the variable, that is) with the new
selection.
Sp+
|
|
|
|