Я не вижу необходимости в CImage new_image (поскольку SetBitmap принимает HBITMAP, который у вас уже есть через pb), а pb и pMDC должны быть удалены (после отсоединения HBITMAP), но в остальном кажется правильным.
CImage img1;
int dimx = 100, dimy = 100;
img1.Load(filename);
//filename = path on local system to the bitmap
CDC *screenDC = GetDC();
CDC mDC;
mDC.CreateCompatibleDC(screenDC);
CBitmap b;
b.CreateCompatibleBitmap(screenDC, dimx, dimy);
CBitmap *pob = mDC.SelectObject(&b);
mDC.SetStretchBltMode(HALFTONE);
img1.StretchBlt(mDC.m_hDC, 0, 0, dimx, dimy, 0, 0, img1.GetWidth(), img1.GetHeight(), SRCCOPY);
mDC.SelectObject(pob);
m_pictureCtrl.SetBitmap((HBITMAP)b.Detach());
ReleaseDC(screenDC);
Конечно, я бы поместил масштабирование CImage / CBitmap в отдельную функцию (сделайте его многоразовым).