一、MFC添加类向导
源文件→右键添加类向导

二、添加键盘enter消息响应

添加以后就可以在下面实现自己想要的消息响应了

三、项目示例:添加键盘消息响应实现图像边缘检测结果对话框显示
按下回车键就会显示边缘检测结果
1、EdgeDetect.cpp
cpp
void EdgeDetect(SIZE sz, PBYTE pSrc, PBYTE pDst)
{
ASSERT(pSrc);
ASSERT(pDst);
int w = sz.cx;
int h = sz.cy;
for (int y = 1; y < h - 1; y++)
{
for (int x = 1; x < w - 1; x++)
{
int v01 = pSrc[(y - 1) * w + x];
int v10 = pSrc[y * w + (x - 1)];
int v11 = pSrc[y * w + x];
int v12 = pSrc[y * w + (x + 1)];
int v21 = pSrc[(y + 1) * w + x];
int g = 4 * v11 - v01 - v10 - v12 - v21;
if (g < 0) g = -g;
if (g > 255) g = 255;
pDst[y * w + x] = (BYTE)g;
}
}
}
void EdgeDetectRGB(int w, int h, BYTE* pRGB)
{
int img_size = w * h;
static BYTE s_pGray[IMG_MAX_SIZE];
static BYTE s_pEdge[IMG_MAX_SIZE];
RgbToYuv(w, h, pRGB, pRGB);
for (int i = 0; i < img_size; i++)
{
s_pGray[i] = pRGB[i * 3];
}
SIZE sz;
sz.cx = w;
sz.cy = h;
EdgeDetect(sz, s_pGray, s_pEdge);
// PBYTE pSrc = s_pEdge
// PBYTE pDst = s_pGray
/* for (int i = 0; i < img_size; i++)
{
BYTE e = *pSrc++;
*pDst++ = e;
*pDst++ = e;
*pDst++ = e;
}*/
for (int i = 0; i < img_size; i++)
{
BYTE e = s_pEdge[i];
pRGB[i * 3 + 0] = e;
pRGB[i * 3 + 1] = e;
pRGB[i * 3 + 2] = e;
}
}
.h

view.cpp

下面这种方法是直接在KeyDown里面直接执行边缘检测,随便按下键盘的某个键都行。

GrayToRGB代码实现
cpp
void GrayToRGB(SIZE sz, PBYTE aRGB, PBYTE aGray, int nBPP)
{
int img_size = sz.cx * sz.cy;
PBYTE pSrc = aGray;
PBYTE pDst = aRGB;
for (int i = 0; i < img_size; i++)
{
BYTE gray = pSrc[i]; //PBYTE gray = *pSrc++;
pDst[0] = gray; //*pSrc++ = gray
pDst[1] = gray;
pDst[2] = gray;
pDst += 3;
}
}