|
VivekuniQ wrote: a question from ALOK???, that should be a real question
Why! Isn't I am human being... I have problems too..
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
|
Basically what Cedric said. For static functions, the declaration of the pointer to the function does include the classname. So if you had
bool (*m_pt2CallbackFunc)(wxCoord x, wxCoord y);
instead of
bool (T::*m_pt2CallbackFunc)(wxCoord x, wxCoord y);
your code would have worked. If you do have the classname prefixed, you can only pass non-static member functions of T.
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
S. Senthil Kumar wrote: Basically what Cedric said. For static functions, the declaration of the pointer to the function does include the classname. So if you had
bool (*m_pt2CallbackFunc)(wxCoord x, wxCoord y);
I know about that method... but I am trying to use templates with function pointer! any suggestion
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
I don't get it. Are you saying you want to solve the problem without changing the function pointer signature and the static modifier?
The problem you have is not in any way related to templates, it's because you are passing a wrong function to be assigned to a function pointer. Take this class for example.
class X
{
public:
static void Y(bool x)
{
}
};
Now if the function pointer is typedeffed to typedef void (*Func)(bool x); , you can do Func f = &X::Y; . However, if the function pointer is typedeffed to typedef void (*X::Func)(bool x); , you can't do Func f = &X::Y; . That's because X::Func implies that the first (or last) parameter of the function pointed to by Func is the "this" pointer (thiscall calling convention). Because static functions don't take the "this" pointer as a parameter, the compiler will reject Func f = &X::Y; .
The solution is to remove the static modifier from Y, or, change the typedef by removing the X:: prefix.
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
S. Senthil Kumar wrote: The solution is to remove the static modifier from Y, or, change the typedef by removing the X:: prefix.
Hai Senthil,
Thanks for your time... I have found the solution, my friend soon post the code here !
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
-- modified at 1:47 Friday 23rd December, 2005
|
|
|
|
|
here is the solution :-
#include <iostream>
#include <string>
using namespace std;
typedef int wxCoord;
typedef string wxString;
template <class T>
class CTextDropTarget
{
private:
typedef bool (T::*pt2Func)(wxCoord, wxCoord, const wxString&);
T* m_pParent;
pt2Func m_pt2CallbackFunc;
public:
CTextDropTarget(T* pParent, pt2Func pt2CallbackFunc);
virtual ~CTextDropTarget(void);
virtual bool OnDropText(wxCoord x, wxCoord y, const wxString& data);
};
template <class T>
CTextDropTarget<T>::CTextDropTarget(T* pParent, pt2Func pt2CallbackFunc)
: m_pParent(pParent)
, m_pt2CallbackFunc(pt2CallbackFunc)
{}
template <class T>
CTextDropTarget<T>::~CTextDropTarget(void)
{}
template <class T>
bool CTextDropTarget<T>::OnDropText(wxCoord x, wxCoord y, const wxString& data)
{
return (m_pParent->*m_pt2CallbackFunc)(x, y, data);
}
class CMyListCtrl
{
private:
CTextDropTarget<CMyListCtrl > *m_pDropTarget;
public:
CMyListCtrl()
{
m_pDropTarget = new CTextDropTarget< CMyListCtrl >(this, CMyListCtrl::OnTextDropTarget);
}
bool OnTextDropTarget(wxCoord x, wxCoord y, const wxString& data)
{
std::cout << data;
return true;
}
};
void main()
{
CMyListCtrl a;
}
<p align='right'> <small>"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow</small></p>
cheers,
<a target=_blank href="http://www.thatsalok.com"> Alok Gupta </a>
VC Forum Q&A :- <a href="http://www.codeproject.com/tips/cppfaq10dec04-23jan05.asp" target=_blank>I</a>/ <a href="http://www.codeproject.com/useritems/cppfaq25apr8jun.asp" target=_blank>IV</a>
|
|
|
|
|
I have an older program written in C laguage. can i add a COM component to it, so that i may use its funtionality.
any sample is highly appreciated.
|
|
|
|
|
Is it C or C++ ? If it's C++, does it use the WIN32 API ?
|
|
|
|
|
I am using simple c language no c++, currently there is no win api's, but in the future there may or may not use api's.
|
|
|
|
|
Yes you can. Here is an example calling Microsoft's DirectX diagnostic utilities. The
interface IDxDiagProvider is a C++ class or a C structure. Here it is a C structure and the V-Table methods are called through the lpVtbl structure of function pointers. Also the pointer to the object it self is passed into the first parameter since there is no "this" pointer.
HRESULT hr;<br />
BOOL bCleanupCOM = FALSE;<br />
IDxDiagProvider* pDxDiagProvider = NULL;<br />
DXDIAG_INIT_PARAMS dxDiagInitParams;<br />
VARIANT var;<br />
char strDestination[10];<br />
<br />
hr = CoInitialize( NULL );<br />
<br />
bCleanupCOM = SUCCEEDED( hr );<br />
<br />
hr = CoCreateInstance( &CLSID_DxDiagProvider, NULL, CLSCTX_INPROC_SERVER,<br />
&IID_IDxDiagProvider, (void**)&pDxDiagProvider );<br />
<br />
if( SUCCEEDED( hr ) )<br />
{<br />
ZeroMemory( &dxDiagInitParams, sizeof( DXDIAG_INIT_PARAMS ) );<br />
<br />
dxDiagInitParams.dwSize = sizeof( DXDIAG_INIT_PARAMS );<br />
dxDiagInitParams.dwDxDiagHeaderVersion = DXDIAG_DX9_SDK_VERSION;<br />
dxDiagInitParams.bAllowWHQLChecks = FALSE;<br />
dxDiagInitParams.pReserved = NULL;<br />
<br />
hr = pDxDiagProvider->lpVtbl->Initialize( pDxDiagProvider, &dxDiagInitParams );
I hope this helps.
Human beings were not meant to sit in little cubicles staring at computer screens all day, filling out useless forms and listening to eight different bosses drone on about about mission statements. -- Peter Gibbons
|
|
|
|
|
|
I have a problem with drawing a non rectangular bitmap using a mask bitmap.
The two bitmaps are derived from an icon file in the resources. I want to create a HBITMAP object that contains the correct result of the masked drawing.
<br />
HICON hIcon5 = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON12));<br />
GetIconInfo(hIcon5, &iinfo);
BITMAP bm;<br />
GetObject(iinfo.hbmColor,sizeof(bm),&bm);<br />
<br />
HDC hdcToolbar = GetDC(hToolbar);
HDC hdcBitmap5 = CreateCompatibleDC(hdcToolbar);<br />
HDC hdcMask = CreateCompatibleDC(hdcToolbar) ;<br />
HDC hdcColor = CreateCompatibleDC(hdcToolbar) ;<br />
<br />
HBITMAP hBitmap5 = CreateCompatibleBitmap(hdcBitmap5,bm.bmWidth,bm.bmHeight);<br />
HGDIOBJ hOldBitmap5 = SelectObject(hdcBitmap5, hBitmap5);<br />
HGDIOBJ hOldMask = SelectObject(hdcMask, iinfo.hbmMask) ;<br />
HGDIOBJ hOldColor = SelectObject(hdcColor, iinfo.hbmColor);<br />
<br />
BitBlt (hdcBitmap5, 0, 0, bm.bmWidth,bm.bmHeight, NULL, 0, 0, WHITENESS);<br />
BitBlt (hdcBitmap5, 0, 0, bm.bmWidth,bm.bmHeight, hdcMask, 0, 0, 0x220326);
BitBlt (hdcBitmap5, 0, 0, bm.bmWidth,bm.bmHeight, hdcColor, 0, 0, SRCPAINT) ;<br />
<br />
SelectObject(hdcMask, hOldMask) ;<br />
SelectObject(hdcColor, hOldColor);<br />
SelectObject(hdcBitmap5, hOldBitmap5);<br />
DeleteDC(hdcMask);<br />
DeleteDC(hdcColor);<br />
DeleteDC(hdcBitmap5);<br />
ReleaseDC(hToolbar, hdcToolbar);<br />
Download the icon i used for the test here
Can someone help me please?
thanks in advance,
Ward
|
|
|
|
|
Why not just use DrawIcon() ?
Ward wrote: HBITMAP hBitmap5 = CreateCompatibleBitmap(hdcBitmap5,bm.bmWidth,bm.bmHeight);
At this point in your code hdcBitmap5 has a one by one pixel monchrome bitmap selected into it. When you create a compatible bitmap it will also be a monochrome bitmap. You should use hdcToolbar as the HDC for creating compatible bitmaps.
[blatant self-promotion]
Have a look at http://www.codeproject.com/tools/imageviewer.asp[^]
[/blatant self-promotion]
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" - mYkel - 21 Jun '04
"There's not enough blatant self-congratulatory backslapping in the world today..." - HumblePie - 21 Jun '05
Within you lies the power for good - Use it!
|
|
|
|
|
Well, at first I've tried DrawIcon, but when I wanted to use the bitmap hBitmap5 as the bitmap for a toolbar button (used in TB_ADDBUTTON-message) the area which was supposed to be the background color of the toolbarbuttons, were turned in white.
I did found a solution last friday (at last). First I fill the hBitmap5 with the color of the toolbar buttons. The color of the toolbar buttons I was able to retreive using GetSysColor. Then I used the DrawIcon on this hBitmap5. And finally I passed this hBitmap5 to the toolbar with the TB_ADDBUTTON-message.
The final result is now exact what I wanted.
Anyway, thanks for your reply.
kind regards,
Ward
-- modified at 16:09 Sunday 25th December, 2005
|
|
|
|
|
I am making an Application analyzer.
It involves analyzing menu structure of an application too.
For acrobat reader it doesn't return any text for a menu. I am getting the menu items correctly but no text. So tree nodes are empty. I guess it could be because it is "ownerdrawn" (not me;P).
But For Visual studio 2003 GetMenu returns NULL.
For Other windows it's working fine. For eg: Yahoo messenger.
Any ideas why this's happening.
Happy christmas friends. May the Love of My Lord and Saviour Jesus bring forth Joy and Happiness into your life too.
<marquee direction="up" height="50" scrolldelay="1" step="1" scrollamount="1" hspace="2" vspace="2">
--Owner Drawn
--Nothing special
--Defeat is temporary but surrender is permanent
--Never say quits
--Jesus is Lord
-- modified at 6:29 Thursday 22nd December, 2005
|
|
|
|
|
Hi all,
What is the difference between _tcscpy and lstrcpy?
Is there any advantage for _tcscpy or lstrcpy by means of speed, memory usage, etc. compare to other?
Thank you.
- NS -
|
|
|
|
|
|
Yes, exactly.
I know _tcscpy will become wcscpy, strcpy or _mbscpy with character setting (_UNICODE, _MBCS, tc).
But I would like to know that, what is the advantage of one over another?
- NS -
|
|
|
|
|
Here is a crazy one I discovered while investigating some shoddy source code : If you pass an invalid pointer into lstrcpy, it will 'silently' throw an accessviolation exception which it will then catch, and continue on its merry way
The _tcscpy will probably directly cause an unhandled access violation in similar circumstances.
No shirt, no shoes, no brains, no service.
-- modified at 11:41 Thursday 22nd December, 2005
|
|
|
|
|
Thank you.
This makes the lstrcpy better than _tcscpy... to write better programs!
Thank you once again.
- NS -
|
|
|
|
|
NS17 wrote: _tcscpy or lstrcpy
offcourse lstrcpy is better as it reduce the dependency of runtime c library.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
|
lstrcpy is a function of Windows API and _tcscpy is from C Runtime Library. This is the basic difference. Otherwise, both resolve to same things.
lstrcpyA does the same job as strcpy. lstrcpyW does the same job as wcscpy. (So lstrcpy does the same job as _tcscpy.) It's useful to use lstrXXX if you feel the need to eliminate the C library entirely.
Ahh... I didnt see Alok's reply. He had already said this.
-- modified at 0:59 Friday 23rd December, 2005
|
|
|
|
|
Thank you.
Please see the post of Blake Miller, which is also very significant.
- NS -
|
|
|
|
|