|
I'm truing to make cd-label app, so...
How can i add text, from textbox, into bitmap and save them together in bmp, or jpg?
|
|
|
|
|
|
Hi there !
My problem is as follows:
I have a CFtpConnection and there are some cases, that it is blocking.
I already put it into a thread, everything is working good, but: When it blocks, how can i kill it (like TerminateThread() , but this is not cleaning up...)
Thanx in advance!
Olli
I feel like I'm diagonally parked in a parallel universe.....
|
|
|
|
|
I would recommend to use async monikers instead of MFC classes such like CFtpConnection and so on.
In a previous project, I just derived my class from IBindStatusCallback and implemented a few methods required for data transfer. The good news is that I could stop the transfer at any moment properly, hence achieving what you are looking for.
Below is a sample code that did a http://... file transfer :
class CXmlInternetFileManager : public CXmlFileManager, public IBindStatusCallback
{
protected:
long m_cRef;
char m_szProxy[MAX_PATH];
int m_nProxyPort;
IBinding* m_pBinding;
IStream* m_pStream;
HWND m_hwndStatus;
FILE *m_tmpFile;
BOOL m_bStop_EvrythingIsReceived;
DWORD m_dwLoadedSoFar;
DWORD m_dwOffsetReadByClient;
public:
CXmlInternetFileManager();
virtual ~CXmlInternetFileManager();
virtual BOOL Open(char *szURL);
virtual BOOL Read(char *szInputBuffer, int nMaxLength, int &nActualLength);
virtual BOOL Close();
public:
virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv) ;
virtual ULONG __stdcall AddRef() ;
virtual ULONG __stdcall Release() ;
virtual HRESULT STDMETHODCALLTYPE OnStartBinding(
DWORD dwReserved,
IBinding __RPC_FAR *pib);
virtual HRESULT STDMETHODCALLTYPE GetPriority(
LONG __RPC_FAR *pnPriority);
virtual HRESULT STDMETHODCALLTYPE OnLowResource(
DWORD reserved);
virtual HRESULT STDMETHODCALLTYPE OnProgress(
ULONG ulProgress,
ULONG ulProgressMax,
ULONG ulStatusCode,
LPCWSTR szStatusText);
virtual HRESULT STDMETHODCALLTYPE OnStopBinding(
HRESULT hresult,
LPCWSTR szError);
virtual HRESULT STDMETHODCALLTYPE GetBindInfo(
DWORD __RPC_FAR *grfBINDF,
BINDINFO __RPC_FAR *pbindinfo);
virtual HRESULT STDMETHODCALLTYPE OnDataAvailable(
DWORD grfBSCF,
DWORD dwSize,
FORMATETC __RPC_FAR *pformatetc,
STGMEDIUM __RPC_FAR *pstgmed);
virtual HRESULT STDMETHODCALLTYPE OnObjectAvailable(
REFIID riid,
IUnknown __RPC_FAR *punk);
private:
CXmlInternetFileManager& operator=(const CXmlInternetFileManager &obj);
};
#include "stdafx.h"
#include "XmlFileManager.h"
CXmlInternetFileManager::CXmlInternetFileManager() : m_cRef(0)
{
}
CXmlInternetFileManager::~CXmlInternetFileManager()
{
Close();
}
CXmlInternetFileManager& CXmlInternetFileManager::operator=(const CXmlInternetFileManager &obj)
{
return *this;
}
HRESULT CXmlInternetFileManager::QueryInterface(const IID& iid, void** ppv)
{
if (iid == IID_IUnknown)
{
*ppv = static_cast<IBindStatusCallback*>(this) ;
}
else if (iid == IID_IBindStatusCallback)
{
*ppv = static_cast<IBindStatusCallback*>(this) ;
}
else
{
*ppv = NULL ;
return E_NOINTERFACE;
}
reinterpret_cast<IUnknown*>(*ppv)->AddRef() ;
return S_OK ;
}
ULONG CXmlInternetFileManager::AddRef()
{
return InterlockedIncrement(&m_cRef) ;
}
ULONG CXmlInternetFileManager::Release()
{
if (InterlockedDecrement(&m_cRef) == 0)
{
delete this ;
return 0 ;
}
return m_cRef ;
}
BOOL CXmlInternetFileManager::Open(char *szURL)
{
HRESULT hr;
if (!szURL || strlen(szURL)==0)
return FALSE;
m_dwLoadedSoFar=0;
m_dwOffsetReadByClient=0;
m_bStop_EvrythingIsReceived = FALSE;
strcpy(m_szURL, szURL);
m_tmpFile = fopen("c:\\test.txt","w+b");
IBindCtx *pbc=NULL;
hr = CreateAsyncBindCtx(0, this , NULL, &pbc);
if (FAILED(hr))
return FALSE;
IMoniker *pmk=NULL;
WCHAR *swzURL = new WCHAR[strlen(szURL)+1];
::MultiByteToWideChar(CP_ACP, 0, szURL, -1, swzURL, strlen(szURL)+1);
hr = CreateURLMoniker(NULL, swzURL, &pmk);
if (FAILED(hr))
return FALSE;
hr = pbc->RegisterObjectParam(SZ_ASYNC_CALLEE, pmk);
if (FAILED(hr))
return FALSE;
IStream* pStream;
hr = pmk->BindToStorage(pbc, NULL, IID_IStream, (void**) &pStream);
if (FAILED(hr))
return FALSE;
delete [] swzURL;
return TRUE;
}
BOOL CXmlInternetFileManager::Read(char *szInputBuffer, int nMaxLength, int &nActualLength)
{
while(1)
{
peekMessage();
nActualLength = 0;
if ( m_dwOffsetReadByClient < m_dwLoadedSoFar)
{
long nAvailable = m_dwLoadedSoFar - m_dwOffsetReadByClient;
if (nAvailable>nMaxLength-1)
nAvailable = nMaxLength-1;
fseek(m_tmpFile,m_dwOffsetReadByClient,SEEK_SET);
nActualLength = fread(szInputBuffer, 1, nAvailable, m_tmpFile);
szInputBuffer[nActualLength]='\0';
m_dwOffsetReadByClient += nAvailable;
return TRUE;
}
if (m_bStop_EvrythingIsReceived)
return TRUE;
}
}
BOOL CXmlInternetFileManager::Close()
{
if (m_tmpFile)
{
fclose(m_tmpFile);
m_tmpFile=NULL;
}
return TRUE;
}
HRESULT STDMETHODCALLTYPE CXmlInternetFileManager::OnStartBinding(
DWORD dwReserved,
IBinding __RPC_FAR *pib)
{
m_pBinding = pib;
m_pBinding->AddRef();
m_pStream = NULL;
return S_OK;
}
HRESULT STDMETHODCALLTYPE CXmlInternetFileManager::GetPriority(
LONG __RPC_FAR *pnPriority)
{
return S_OK;
}
HRESULT STDMETHODCALLTYPE CXmlInternetFileManager::OnLowResource(
DWORD reserved)
{
return S_OK;
}
HRESULT STDMETHODCALLTYPE CXmlInternetFileManager::OnProgress(
ULONG ulProgress,
ULONG ulProgressMax,
ULONG ulStatusCode,
LPCWSTR szStatusText)
{
return(NOERROR);
}
HRESULT STDMETHODCALLTYPE CXmlInternetFileManager::OnStopBinding(
HRESULT hresult,
LPCWSTR szError)
{
m_pBinding->Release();
m_pBinding = NULL;
m_pStream = NULL;
m_bStop_EvrythingIsReceived = TRUE;
return S_OK;
}
HRESULT STDMETHODCALLTYPE CXmlInternetFileManager::GetBindInfo(
DWORD __RPC_FAR *grfBINDF,
BINDINFO __RPC_FAR *pbindinfo)
{
return S_OK;
}
HRESULT STDMETHODCALLTYPE CXmlInternetFileManager::OnDataAvailable(
DWORD grfBSCF,
DWORD dwSize,
FORMATETC __RPC_FAR *pformatetc,
STGMEDIUM __RPC_FAR *pstgmed)
{
if (m_pStream==NULL)
m_pStream = (IStream*) pstgmed->pstm;
if (0)
{
m_pBinding->Abort();
}
else
{
if (dwSize > m_dwLoadedSoFar)
{
DWORD dwRead = dwSize - m_dwLoadedSoFar;
DWORD dwActuallyRead;
char *buf = new char[dwRead];
m_pStream->Read(buf, dwRead, &dwActuallyRead);
fseek(m_tmpFile,0,SEEK_END);
fwrite(buf,1,dwActuallyRead,m_tmpFile);
delete buf;
m_dwLoadedSoFar = dwSize;
}
}
return S_OK;
}
HRESULT STDMETHODCALLTYPE CXmlInternetFileManager::OnObjectAvailable(
REFIID riid,
IUnknown __RPC_FAR *punk)
{
return S_OK;
}
And I swallow a small raisin.
|
|
|
|
|
Hi Stephane!
First of all, thanx for your answer! This piece of code is looking awsome.... I'm not really new to VC and MFC, but this is for a short overlook really heavy...
Maybe it would be possible to give me a smaller example to get a quick look behind the main points?? This would be great!
Thanx,
Olli
Olli
I feel like I'm diagonally parked in a parallel universe.....
|
|
|
|
|
how to get point(x,y) where mouse click on desktop window
how to capture mouse events which will tell its position ,what button click etc.
is there any interrupt service of mouse where we can write our procedure ? to get mouse event info?
same for keborad ?
r00d0034@yahoo.com
|
|
|
|
|
You'll need a global hook. Check the docs for SetWindowsHookEx.
Tomasz Sowinski -- http://www.shooltz.com
"Yields falsehood when preceded by its quotation" yields falsehood when preceded by its quotation.
|
|
|
|
|
can u give me helping meterial related to
SetWindowsHookEx.
or any link that could solve mine problem
r00d0034@yahoo.com
|
|
|
|
|
|
please read that code and solve mine problem
tmpProcess = new Process();
tmpProcess.WaitForInputIdle();
tmpProcess.StartInfo.FileName="f:\\mirc59t";
try{
tmpProcess.Start();
while(! tmpProcess.Responding)System.Windows.Forms.Application.DoEvents();
}catch{}
tmpProcess.WaitForInputIdle();
IntPtr hWnd=tmpProcess.MainWindowHandle;
Srm=new send_recive_messages(hWnd);
/*/////////////////////////////////////////////////////
managed public __gc class send_recive_messages constructor
////////////////////////////////////////////////////*/
send_recive_messages::send_recive_messages(IntPtr par_hwnd)
{
hwnd=(HWND)par_hwnd.ToInt64();
TCHAR szBuffer[256],szBuffer1[256];
::GetWindowText(hwnd, szBuffer, sizeof(szBuffer) / sizeof(TCHAR));
::GetClassName(hwnd, szBuffer1, sizeof(szBuffer1) / sizeof(TCHAR));
//////////////////////////////////////////////////////////
HWND h=::FindWindowEx(hwnd,0,szBuffer1,szBuffer);
//////////////////////////////////////////////////////////
}//code finish herer
///////////////////////////////////////////
h variable recive zero that's why remaining code could not run.
it should not recive zero because the process main window
contain two button and four Static members.
can any body tell why it recive 0?
and what i have to do so that it should not recive zero?
r00d0034@yahoo.com
|
|
|
|
|
Maybe calling GetLastError() after FindWindowEx() might shed some light on things?
Cheers,
Fredrik
<right>Sonork ID: 100.11430:PhatBoy
"Felix qui potuit rerum cognoscere causas."
|
|
|
|
|
FindWindowEx needs the caption/class of the child window. You're passing caption/class of main window.
Tomasz Sowinski -- http://www.shooltz.com
Never argue with an idiot, he'll bring you to his level and beat you with experience.
|
|
|
|
|
FindWindowEx needs the caption/class of the child window. You're passing caption/class of main window.
how to get that caption class plz help me.
r00d0034@yahoo.com
|
|
|
|
|
Can't you just use GetDlgItem? You know the IDs of child windows, don't you?
Tomasz Sowinski -- http://www.shooltz.com
"Yields falsehood when preceded by its quotation" yields falsehood when preceded by its quotation.
|
|
|
|
|
Hey Guys
I have a CView dirived class i am using as my main view in an MDI application and i have a CWnd derived class which is a control i am writing how do i get the control to be drawn inside the CView Class i have tried BeginPaint and Print with no luck. At the moment i create the control in the create part of the CView and then check for a safe handle in the paint of teh cview before calling BeginPaint of the control which doesn't work.
Cheers Peter
|
|
|
|
|
If you have created you CWnd derived control as a chile window of the CView, then as long as its visible and withoin the CView's client area then it should appear. Make sure when creating the control that the WS_CHILD and WS_VISIBLE style have been set.
For example, in one of my apps, I create a list of controls like this:
m_Log.Create("Log window", WS_CHILD | WS_VISIBLE | SS_SUNKEN | SS_CENTERIMAGE | SS_NOTIFY| WS_CLIPSIBLINGS, CRect(10, 10, 100, 100), this, IDC_EDIT1) ;
m_WhizWheel.Create("Wheel", WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_NOTIFY | WS_CLIPSIBLINGS, CRect(0, 0, 20, 20), this, IDC_WHIZ_WHEEL) ;
m_WhizWheel.SetBitmap(m_WheelBitmap[m_BitmapIndex]) ;
m_TrayProgress.Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH | SS_NOTIFY | WS_CLIPSIBLINGS, CRect(10, 10, 15, 100), this, IDC_TRAY_PROGRESS) ;
m_SampleProgress[0].Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH | SS_NOTIFY | WS_CLIPSIBLINGS, CRect(20, 10, 25, 100), this, IDC_SAMPLE_PROGRESS1) ;
m_SampleProgress[1].Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH | SS_NOTIFY | WS_CLIPSIBLINGS, CRect(20, 10, 25, 100), this, IDC_SAMPLE_PROGRESS2) ;
m_SampleProgress[2].Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH | SS_NOTIFY | WS_CLIPSIBLINGS, CRect(20, 10, 25, 100), this, IDC_SAMPLE_PROGRESS3) ;
m_SampleProgress[3].Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH | SS_NOTIFY | WS_CLIPSIBLINGS, CRect(20, 10, 25, 100), this, IDC_SAMPLE_PROGRESS4) ;
m_ValveStatus.Create("?", WS_CHILD | WS_VISIBLE | SS_NOTIFY | WS_CLIPSIBLINGS, CRect(0, 0, 15, 15), this, IDC_VALVE_LED) ;
m_DadStatus.Create("?", WS_CHILD | WS_VISIBLE | SS_NOTIFY | WS_CLIPSIBLINGS, CRect(0, 0, 15, 15), this, IDC_DAD_LED) ;
m_LampStatus.Create("?", WS_CHILD | WS_VISIBLE | SS_NOTIFY | WS_CLIPSIBLINGS, CRect(0, 0, 15, 15), this, IDC_LAMP_LED) ;
m_DeviceStatus[0].Create("?", WS_CHILD | WS_VISIBLE | SS_NOTIFY | WS_CLIPSIBLINGS, CRect(0, 0, 15, 15), this, IDC_DEVICE1_LED) ;
m_DeviceStatus[1].Create("?", WS_CHILD | WS_VISIBLE | SS_NOTIFY | WS_CLIPSIBLINGS, CRect(0, 0, 15, 15), this, IDC_DEVICE2_LED) ;
I then later on use MoveWindow() on each of the controls to place them exactly where I want them to be.
Roger Allen
Sonork 100.10016
I think I need a new quote, I am on the prowl, so look out for a soft cute furry looking animal, which is really a Hippo in disguise. Its probably me.
|
|
|
|
|
How do I get the size of the titlebar and the left-right-top-bottom borders of a framelike window?
something like Frame.getInsets() in java.
tnx
[VISUAL STUDIO 6.0] [MFC] [WIN98/2]
Bluute tette!
|
|
|
|
|
frisco wrote:
How do I get the size of the titlebar and the left-right-top-bottom borders of a framelike window?
Try GetSystemMetrics or SystemParametersInfo with SPI_GETNONCLIENTMETRICS.
Tomasz Sowinski -- http://www.shooltz.com
Never argue with an idiot, he'll bring you to his level and beat you with experience.
|
|
|
|
|
Hi,
I'm trying to "plug together" some STL, but I don't get along with it:
I have a sorted array of int's,
I want to find the index range where the values fall in a certain range
in: int * array, size (sorted)
minval, maxval
out: minidx, maxidx, so that minval <= array[minidx..maxid] <= maxval
Any STL gurus around?
TIA
Peter
You don't need to sleep to see a nightmare Anne Clark [sighist]
|
|
|
|
|
Try with lower_bound and upper_bound.
Tomasz Sowinski -- http://www.shooltz.com
Never argue with an idiot, he'll bring you to his level and beat you with experience.
|
|
|
|
|
forgot to say: thank you, seems to work
You don't need to sleep to see a nightmare Anne Clark [sighist]
|
|
|
|
|
Is this possible...? I can't find anything on this topic...?
If not..is there anyway to vertically center the text in a singleline CEdit control...?
Thanx!
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
I am currently using the method CListCtrl::FindItem() to search in the first column of a CListCtrl. Is it possible to search through another column than the first one?
I also committed the crime of posting a programming question in the Lounge.
|
|
|
|
|
AFAIK, your only option is iterating over all items and checking each with GetItemText.
Tomasz Sowinski -- http://www.shooltz.com
Never argue with an idiot, he'll bring you to his level and beat you with experience.
|
|
|
|
|
just an idea: on creation time create also a std::map for each column and access them.
|
|
|
|
|