|
toxcct wrote: i don't know why it does happen, but you might try to call a global function thinking it is a class member.
Any other solution!
"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
|
|
|
|
|
toxcct wrote: i don't know why it does happen
It is because the prototypes for a normal function (__cdecl) and a member function of a class (__thiscall) are different. For the class function, an extra parameter is passed implicitely which is the this parameter (in order for the function to be able to know which instance of the class called her).
Two solution: change the function to a global function (which is not really appropriate) or change it into a static function. A static function (member of a class) is shared among all instances of that class thus, it doesn't require the implicit this parameter but this also implies that you cannot use non-static members (functions or variables) of the class.
|
|
|
|
|
Remove the static keyword from the OnTextDropTarget function in your CSACAddressListCtrl class.
The constructor of your template class expects a member function of your class (template) thus if this function is static, the prototype is different ( see my other post in response to toxcct).
|
|
|
|
|
Cedric Moonen wrote: Remove the static keyword from the OnTextDropTarget function in your CSACAddressListCtrl class.
Hai Cedric,
I know that way... but i am looking for templatized solution... which i believe not that simple
"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
|
|
|
|
|
a question from ALOK??? , that should be a real question.
"But your mind is very complex, very tricky. It makes simple things complicated. -- that's its work. And for centuries it has been trained for only one thing: to make things so complicated that your life becomes impossible."- Osho
<marquee scrollamount="1" scrolldelay="1" direction="up" height="10" step="1"> --[V]--
|
|
|
|
|
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
|
|
|
|
|