|
comb and shave, goat-beard boy
http://www.adga.org[^]
were rgrtgrtvrtrt rtrtb brt tyuhjghj hbhbnh hnjm 1234567?
|
|
|
|
|
I suppose your control already has the LVS_REPORT style.
In the window or dialog containing the CListCtrl, add a NM_CUSTOMDRAW notification. Then just code the different colors you wish in the added notification method, like in the following example (for more information, see:
Customizing a Control's Appearance Using Custom Draw, in MSDN
Owner-draw CListCtrl MFC app at http://www.simtel.net/pub/pd/15298.shtml)
void CTestListCtrlDlg::OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult)<br />
{<br />
LPNMLVCUSTOMDRAW pNMCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);<br />
<br />
*pResult = 0; <br />
<br />
switch(pNMCD->nmcd.dwDrawStage)<br />
{<br />
case CDDS_PREPAINT:<br />
*pResult = CDRF_NOTIFYITEMDRAW;<br />
break;<br />
<br />
case CDDS_ITEMPREPAINT:<br />
<br />
*pResult = CDRF_NOTIFYSUBITEMDRAW;<br />
break;<br />
<br />
case CDDS_SUBITEM | CDDS_ITEMPREPAINT:<br />
switch(pNMCD->iSubItem) {<br />
case 0:<br />
switch(pNMCD->nmcd.dwItemSpec) {<br />
case 0:<br />
pNMCD->clrText = RGB(0,0,0);<br />
pNMCD->clrTextBk = RGB(0,255,255);<br />
break;<br />
default:<br />
pNMCD->clrText = RGB(0,0,0);<br />
pNMCD->clrTextBk = RGB(255,255,255);<br />
break;<br />
}<br />
break;<br />
case 1:<br />
pNMCD->clrText = RGB(255,0,0);<br />
pNMCD->clrTextBk = RGB(255,255,0);<br />
break;<br />
default:<br />
pNMCD->clrText = RGB(0,0,0);<br />
pNMCD->clrTextBk = RGB(255,255,255);<br />
break;<br />
}<br />
*pResult = CDRF_DODEFAULT;<br />
break;<br />
<br />
default:<br />
*pResult = CDRF_DODEFAULT;<br />
break;<br />
}<br />
}
Friendly yours, Chris
|
|
|
|
|
thanks, that was good help
were rgrtgrtvrtrt rtrtb brt tyuhjghj hbhbnh hnjm 1234567?
|
|
|
|
|
Take a look at this[^]. But of course learning custom draw by yourself is always strongly recommended, my... uh, friend.
|
|
|
|
|
hi all,
here is my problem
i want to call a api(ReadFile) fucnction which return the byte array . how i have to declare and pass variables from managed c++.
i am comfortable with receving normal datatypes like int, char. but i can't get the array
please help me.
thankyou
|
|
|
|
|
I need to download huge files over HTTP, using Wininet, and it seems that the only function available to provide information about a file's length is InternetQueryDataAvailable . The problem is that it only returns the length of a chunk available by a call to InternetReadFile
I would like to provide the status of the download in a progress control, therefore i need the total length of the file before the operation begins.
Any ideea?
rechi
|
|
|
|
|
|
|
I want to get a value from a dll,codes as below:
#pragma data_seg(".TimeDATA")
static HWND hCallHook=NULL;
static HHOOK hHook=NULL;
static HINSTANCE hins=NULL;
static char LastEventTimebuf[19]="";
#pragma data_seg()
#pragma comment(linker,"/SECTION:.TimeDATA,RWS")
CRegulardll1App theApp;
HANDLE mutex=NULL;
CRegulardll1App::CRegulardll1App()
{
}
BOOL CRegulardll1App::InitInstance ()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return TRUE;
}
BOOL CRegulardll1App::ExitInstance ()
{
return TRUE;
}
LRESULT __declspec(dllexport)__stdcall CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam)
{
COleDateTime oleLogDate = COleDateTime::GetCurrentTime();
CString strCurTime = oleLogDate.Format("%Y-%m-%d %H:%M:%S");
if(NULL == mutex)
return CallNextHookEx(hHook, nCode,wParam, lParam);
WaitForSingleObject(mutex,INFINITE);
strcpy(LastEventTimebuf,strCurTime);
ReleaseMutex(mutex);
}
}
return CallNextHookEx(hHook, nCode,wParam, lParam);
}
BOOL __declspec(dllexport)__stdcall installhook(HWND hCallProc)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
mutex=CreateMutex(NULL,FALSE,"timemutex");
if(NULL == mutex)
return FALSE;
hCallHook=hCallProc;
hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,hins,0);
return TRUE;
}
BOOL __declspec(dllexport)__stdcall UnHook()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
BOOL unhooked = UnhookWindowsHookEx(hHook);
CloseHandle(mutex);
return TRUE;
}
BOOL __declspec(dllexport) __stdcall GetLastEventTime(char* pBuf,int size)
{
if(NULL == pBuf || size<19)
return FALSE;
else
{
WaitForSingleObject(mutex,INFINITE);
CString str(LastEventTimebuf);
strcpy(pBuf,str);
ReleaseMutex(mutex);
}
return TRUE;
}
when I call GetLastEventTime in my application,the program is shut down. I don't how to use mutex correctly. please tell me what I should to,thanks a lot
|
|
|
|
|
You are creating the mutex in installhook which is called from you app. The mutex handle, mutex, is not shared, so any other process that tries to access mutex (via GetMsgProc) will always get a NULL mutex.
At the begining of GetMsgProc do OpenMutex to set the "mutex" variable for that process to the acutal mutex handle.
Just a personal thing - MFC in hook DLL is a performance killer. And a pain in the arse to boot.
|
|
|
|
|
Diddy,my code is below after modified:
GetMsgProc()
{
HANDLE m_hmutex=NULL;
m_hmutex=OpenMutex(NULL,FALSE,"timemutex");
if(NULL == m_hmutex)
return CallNextHookEx(hHook, nCode,wParam, lParam);
WaitForSingleObject(m_hmutex,INFINITE);
strcpy(LastEventTimebuf,strCurTime);
ReleaseMutex(m_hmutex);
}
BOOL __declspec(dllexport)__stdcall installhook(HWND hCallProc)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
mutex=CreateMutex(NULL,FALSE,"timemutex");
if(NULL == mutex)
return FALSE;
hCallHook=hCallProc;
hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,hins,0);
return TRUE;
}
mutex is also shared,but that problem still exist.
|
|
|
|
|
Change it to:
m_hmutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"timemutex");
Also, in BOOL __declspec(dllexport)__stdcall installhook(HWND hCallProc)
Change:
hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,hins,0);
To:
hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,AfxGetInstanceHandle(),0);
If that doesn't fix it - all I can suggest is its the way you are calling the GetLastEventTime function from your EXE - how are you declaring the exported functions in the EXE? Like this:
BOOL __declspec(dllimport)__stdcall installhook(HWND hCallProc);
BOOL __declspec(dllimport)__stdcall UnHook();
BOOL __declspec(dllimport) __stdcall GetLastEventTime(char* pBuf,int size)
??
Or are you calling via loadlibray/getprocaddress?
|
|
|
|
|
#pragma data_seg(".TimeDATA")
static HWND hCallHook=NULL;
static HHOOK hHook=NULL;
static HINSTANCE hins=NULL;
static HANDLE m_hmutex=NULL;
static char LastEventTimebuf[19]="";
#pragma data_seg()
#pragma comment(linker,"/SECTION:.TimeDATA,RWS")
// CRegulardll1App construction
CRegulardll1App theApp;
CRegulardll1App::CRegulardll1App()
{
}
BOOL CRegulardll1App::InitInstance ()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
hins=AfxGetInstanceHandle();
return TRUE;
}
BOOL CRegulardll1App::ExitInstance ()
{
CloseHandle(m_hmutex);
return TRUE;
}
LRESULT __declspec(dllexport)__stdcall CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam)
{
PMSG pmsg;
pmsg = (PMSG)lParam;
if (nCode >= 0)
{
if((pmsg->message==WM_KEYDOWN || (pmsg->message==WM_MOUSEMOVE)||(pmsg->message==WM_NCLBUTTONDOWN)||(pmsg->message==WM_NCLBUTTONDBLCLK)
||(pmsg->message==WM_LBUTTONDOWN)||(pmsg->message==WM_RBUTTONDOWN)||(pmsg->message==WM_RBUTTONUP)||(pmsg->message==WM_LBUTTONDBLCLK)||(pmsg->message==WM_RBUTTONDBLCLK)))
{
COleDateTime oleLogDate = COleDateTime::GetCurrentTime();
CString strCurTime = oleLogDate.Format("%Y-%m-%d %H:%M:%S");
m_hmutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"timemutex");
WaitForSingleObject(m_hmutex,INFINITE);
strcpy(LastEventTimebuf,strCurTime);
ReleaseMutex(m_hmutex);
}
}
return CallNextHookEx(hHook, nCode,wParam, lParam);
}
BOOL __declspec(dllexport)__stdcall installhook(HWND hCallProc)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
m_hmutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"timemutex");
hCallHook=hCallProc;
hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,AfxGetInstanceHandle(),0);
return TRUE;
}
BOOL __declspec(dllexport)__stdcall UnHook()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
BOOL unhooked = UnhookWindowsHookEx(hHook);
return TRUE;
}
BOOL __declspec(dllexport) __stdcall GetLastEventTime(char* pBuf,int size)
{
if(NULL == pBuf || size<19)
return FALSE;
else
{
WaitForSingleObject(m_hmutex,INFINITE);
CString str(LastEventTimebuf);
strcpy(pBuf,str);
ReleaseMutex(m_hmutex);
}
return TRUE;
}
Application:
HINSTANCE hinstDLL=LoadLibrary("regulardll1.dll");
if(hinstDLL)
{
typedef BOOL GetLastEventTime(char* ,int);
GetLastEventTime* p=(GetLastEventTime*)GetProcAddress(
hinstDLL, "GetLastEventTime");
if(NULL != p)
{
char buf[19]="";
if(p(buf,sizeof(buf)))//Problem happens here
{
CString str(buf);
MessageBox(hWnd,str,"",MB_OK);
}
}
}
|
|
|
|
|
Yes - because:
typedef BOOL GetLastEventTime(char* ,int);
is very different to the way GetLastEventTime is declared:
BOOL __stdcall GetLastEventTime(char* ,int);
You will be screwing up the stack when you call a __stdcall function with __cdecl calling convention (which is the default).
Change it to:
typedef BOOL __stdcall GetLastEventTime(char* ,int);
And it should work.
|
|
|
|
|
thank you very much,I have made a mistake.
|
|
|
|
|
No problem
|
|
|
|
|
Hi all;
I am building an SDI application and have used SkinMagic to provide a convenient skin to the software. It works fine but when i close the application (either by using the X on the window or by clicking 'close' in my application), i get an error after the window has closed.
The errors goes something like this:
The memory referenced @ xxx could not be 'read'.
Its due to the use of the Skinning library but i really don't know how to cut it out.
Could you please help me.
I badly need this.
Thanks
Krugger
|
|
|
|
|
Set a breakpoint in your code (F9) and launch the debugger (F5) to see what is happening
|
|
|
|
|
krugger wrote:
Could you please help me.
Have you tried e-mailing support@appspeed.com?
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|
Debug it using Visual C++. If that does not help, then try a kernel level debugger such as Olly Debugger and SoftICE.
Kuphryn
|
|
|
|
|
Olly Rules
|
|
|
|
|
Hi all;
I am a final year student @ Uni and i'm building an SDI application for my studies.I am using a dialogbar acting as a modeless dialog with some controls scattered on it here and there.
The problem is that i need to handle these controls (e.g ListControls etc..) within another class. When i try to do so, the compilers harshly complains that the window handle is not valid. I know that Modeless dialogs do lose their handles after creation, but i really need to access the controls on the dialogbar.
Can anybody please help me,
I really need this guys.
Thank you;
Kruger
|
|
|
|
|
krugger wrote:
I know that Modeless dialogs do lose their handles after creation
normally, for modeless dialogs, you will need to have either a class variable for it ( or a global variable ) to hold it.
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
when i am trying to resize my applicalion
at that time one modal dialog of my application appears on the screen and i am not able to get the focus on my dialog or application and the mouse pointer still shows the "resize" cursor.
to activate my dialog or application i have to press (alt + tab).
i think it's because there r 2 different thread and my applicacation still calls onsize() and suddenly that dialog appears.
can anyone tell me what should i do?
|
|
|
|
|
Jiten D. Gandhi wrote:
...one modal dialog of my application appears on the screen and i am not able to get the focus on my ... application
This is how modal dialogs behave. You must dismiss them before focus returns to the application.
Jiten D. Gandhi wrote:
...my applicacation still calls onsize() and suddenly that dialog appears.
can anyone tell me what should i do?
Remove the OnSize() handler and see if the problem goes away.
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|