|
My guess:
CRgn::GetRegionData->RGNDATA->RGNDATAHEADER
You can get the points from rcbound from the below structure
typedef struct _RGNDATAHEADER {
DWORD dwSize;
DWORD iType;
DWORD nCount;
DWORD nRgnSize;
RECT rcBound;
} RGNDATAHEADER, *PRGNDATAHEADER;
MSDN[^]
ADDED:
oops, there's a better function:
CRgn::GetRgnBox[^]
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
Thank you VuNic for the quick reply. If my CRgn is not a rectangle, however, this will not solve my problem.
I suppose I could navigate through all RECTs in the RGNDATA struct, creating one POINT for each corner. However, 1) I was hoping there was a function which does this for me and 2) I suspect it is not as easy as it sounds (what if it's a complex region?).
So, I am still hoping for a solution, e.g. a GetPointsFromRegion(CRgn* pRgn, POINT* pPoints, BYTE* pTypes, int& nCount) function.
Greetings,
Jonnie
modified on Friday, March 6, 2009 10:18 AM
|
|
|
|
|
I found these "keywords"
//--- copy points to original structure ---
::CopyMemory((LPBYTE)dwOffsetAddr, lpPointsFx, nPtBufSize);
Here:
http://www.codeproject.com/KB/graphics/TTPolygon.aspx?display=PrintAll[^]
You may check that one. I'm not very sure though.
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
GetRegionData() can give you RECT structures that CRgn consists of as well as a bounding rectangle.
CRgn does not consist of points so you can retrieve them only by taking them from RECT structures, and not retrieving those you've passed to CreatePolygonRgn().
To get points is not possible because if you have points (0,1) (0,3) (0,4) the line (0,1)-(0,4) would be the edge of the region but (0,3) would be lost.
To get edging points from RECT structures is trivial but they do not have to match what you've passed to CreatePolygonRgn() at all.
|
|
|
|
|
Thanks for the clear explanation Aleksandar. I will try implementing my own GetPointsFromRegion() function using the RECT structures.
Greetings,
Jonnie
p.s. I'm surprised this isn't implemented in the CDC or CRgn classes though.
|
|
|
|
|
CRgn does not have to be rectangular, if it has rounded corners or is elliptical, the edge points do not have too much sense to be extracted the same way it is the case for those rectangular.
However, the math definition of region is then quite puzzling . A square that can be a circle
Since we have GetRegionData for rectangular one, getting points from it is really not a problem. Why didn't they make a function for points? The points are not sufficient to define a way a region is really drawn. We could ask why they didn't make a function to extract edges then the same way. Both points and edges and more can be easily obtained from RECT structures.
modified on Friday, March 6, 2009 12:12 PM
|
|
|
|
|
Well - calculating the edge of the region from the RECTs is proving not quite so trivial (imagine a region in the shape of a rainbow or a four leaf clover ). The RECTs are ordered top to bottom, left to right. The algorithm to figure that out is more than I can manage tonight. I'll be back, as the Austrians say.
Jonnie
|
|
|
|
|
Neither is getting precise all edge points from a mixed rounded or elliptical region Maybe Egyptian 22/7 might help there, if a circle is small enough
|
|
|
|
|
If CRgn is actually a number of rectangles, perhaps the nearest you will get is to use FrameRgn to draw a border round the region (or a off-screen copy of the region) in some colour. Then look for something to give you the all pixels/points of that colour starting from a point on the region.
|
|
|
|
|
Thanks Jonathan. If I can't figure out a way using the GetRegionData() method, I may well follow up on your suggestion.
Greetings,
Jonnie
|
|
|
|
|
CRgn has the GetRgnBox method, which gives you the bounding box of the region. Iterate over all the points in the bounding box, calling the PtInRegion for each. The points which return true are in the region, so add them to a list of the points in the region. Job done!
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hi All,
Does anyone know how to convert a CString to a hex and convert the hex values to integer.
For example I have
CString str="0x03";
"0x03" is hex value but this is stored in CString. I want to convert this hex value in to int.
Please help. Thanks
|
|
|
|
|
AnithaSubramani wrote: Does anyone know how to convert a CString to a hex and convert the hex values to integer.
This doesn't make a lot of sense. From what I understood from your example, you have a string representing an hexadecimal number and you want to convert that string into an integer, is that right ?
For that you can use the _tcstol funcion (see here[^]) with 16 as the base.
PS: you should use the _tcstol version in order to support both UNICODE and non-UNICODE builds.
|
|
|
|
|
She might be expecting,
csValue.Format( _T( "%d" ), nValue );
- ns ami -
|
|
|
|
|
That's the other way around: converting an integer into a string.
|
|
|
|
|
No. Akt_4_U has given the right answer.
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
use strtol with 16 as base.
akt
|
|
|
|
|
Hex is just a convenient (context-depending) base for representing numbers.
You may do
CString str=_T("0x03");
long l = _tcstol(str, NULL, 16);
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
AnithaSubramani wrote:
Does anyone know how to convert a CString to a hex and convert the hex values to integer.
See here.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
would anyone know what code starts excuting when the Cwinthread::Create creates a thread ???
|
|
|
|
|
There isn't a CWinThread::Create method.
As about CWinThread::CreateThread method, it is defined in thrdcore.cpp (MFC sources) you may have a look at it.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
sorry still there isn't a thread start function
|
|
|
|
|
The below link will help you.
http://www.codeproject.com/KB/threads/extended_thread.aspx
akt
|
|
|
|
|
Thankx this seems to be what I have been looking for a way to
point to Cwinthread to my own threadproc
|
|
|
|
|
in the example the derived thread CthreaEx sets m_pThreadParms which is a private member of the Base Class Cwinthread ??
|
|
|
|