BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
static HWND hCtrlBlock ;
static int iColor, iFigure ;
switch (message)
{
case WM_INITDIALOG:
iColor = iCurrentColor ;
iFigure = iCurrentFigure ;
CheckRadioButton (hDlg, IDC_BLACK, IDC_WHITE, iColor) ;
CheckRadioButton (hDlg, IDC_RECT, IDC_ELLIPSE, iFigure) ;
hCtrlBlock = GetDlgItem (hDlg, IDC_PAINT) ;
SetFocus (GetDlgItem (hDlg, iColor)) ;
return FALSE ;
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDOK:
iCurrentColor = iColor ;
iCurrentFigure = iFigure ;
EndDialog (hDlg, TRUE) ;
return TRUE ;
case IDCANCEL:
EndDialog (hDlg, FALSE) ;
return TRUE ;
case IDC_BLACK:
case IDC_RED:
case IDC_GREEN:
case IDC_YELLOW:
case IDC_BLUE:
case IDC_MAGENTA:
case IDC_CYAN:
case IDC_WHITE:
iColor = LOWORD (wParam) ;
CheckRadioButton (hDlg, IDC_BLACK, IDC_WHITE, LOWORD (wParam)) ;
PaintTheBlock (hCtrlBlock, iColor, iFigure) ;
return TRUE ;
case IDC_RECT:
case IDC_ELLIPSE:
iFigure = LOWORD (wParam) ;
CheckRadioButton (hDlg, IDC_RECT, IDC_ELLIPSE, LOWORD (wParam)) ;
PaintTheBlock (hCtrlBlock, iColor, iFigure) ;
return TRUE ;
}
break ;
case WM_PAINT:
PaintTheBlock (hCtrlBlock, iColor, iFigure) ;
break ;
}
return FALSE ;
}
以上是window程序设计第十一章第二个例子,问题有两个首先
case WM_INITDIALOG:
iColor = iCurrentColor ;
iFigure = iCurrentFigure ;
CheckRadioButton (hDlg, IDC_BLACK, IDC_WHITE, iColor) ;
CheckRadioButton (hDlg, IDC_RECT, IDC_ELLIPSE, iFigure) ;
hCtrlBlock = GetDlgItem (hDlg, IDC_PAINT) ;
SetFocus (GetDlgItem (hDlg, iColor)) ;
return FALSE ;
我看msdn知道这块应该是return FALSE;但是我改为return true;完全没影响,看到一个前辈发的帖子说是有区别的
可是我怎么测都一样,按照msdn的说法,当返回为真的时候,应该是有系统来设置焦点的位置,根据WS_TABSTOP这个属性,设置焦点为一的控件或得焦点,但是我改了这个序列号,也没什么影响。这是个第一个问题。第二个问题是大家看看,这个对话框的最后return FALSE;就是说没有返回到默认的窗口消息,处理函数,也就是没让window处理别的消息,完全屏蔽(不知道这么说对不对),但是键盘的箭头按键还起作用,tap也起作用。这是为什么搞不懂,苦恼啊!
WPARAM wParam, LPARAM lParam)
{
static HWND hCtrlBlock ;
static int iColor, iFigure ;
switch (message)
{
case WM_INITDIALOG:
iColor = iCurrentColor ;
iFigure = iCurrentFigure ;
CheckRadioButton (hDlg, IDC_BLACK, IDC_WHITE, iColor) ;
CheckRadioButton (hDlg, IDC_RECT, IDC_ELLIPSE, iFigure) ;
hCtrlBlock = GetDlgItem (hDlg, IDC_PAINT) ;
SetFocus (GetDlgItem (hDlg, iColor)) ;
return FALSE ;
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDOK:
iCurrentColor = iColor ;
iCurrentFigure = iFigure ;
EndDialog (hDlg, TRUE) ;
return TRUE ;
case IDCANCEL:
EndDialog (hDlg, FALSE) ;
return TRUE ;
case IDC_BLACK:
case IDC_RED:
case IDC_GREEN:
case IDC_YELLOW:
case IDC_BLUE:
case IDC_MAGENTA:
case IDC_CYAN:
case IDC_WHITE:
iColor = LOWORD (wParam) ;
CheckRadioButton (hDlg, IDC_BLACK, IDC_WHITE, LOWORD (wParam)) ;
PaintTheBlock (hCtrlBlock, iColor, iFigure) ;
return TRUE ;
case IDC_RECT:
case IDC_ELLIPSE:
iFigure = LOWORD (wParam) ;
CheckRadioButton (hDlg, IDC_RECT, IDC_ELLIPSE, LOWORD (wParam)) ;
PaintTheBlock (hCtrlBlock, iColor, iFigure) ;
return TRUE ;
}
break ;
case WM_PAINT:
PaintTheBlock (hCtrlBlock, iColor, iFigure) ;
break ;
}
return FALSE ;
}
以上是window程序设计第十一章第二个例子,问题有两个首先
case WM_INITDIALOG:
iColor = iCurrentColor ;
iFigure = iCurrentFigure ;
CheckRadioButton (hDlg, IDC_BLACK, IDC_WHITE, iColor) ;
CheckRadioButton (hDlg, IDC_RECT, IDC_ELLIPSE, iFigure) ;
hCtrlBlock = GetDlgItem (hDlg, IDC_PAINT) ;
SetFocus (GetDlgItem (hDlg, iColor)) ;
return FALSE ;
我看msdn知道这块应该是return FALSE;但是我改为return true;完全没影响,看到一个前辈发的帖子说是有区别的
可是我怎么测都一样,按照msdn的说法,当返回为真的时候,应该是有系统来设置焦点的位置,根据WS_TABSTOP这个属性,设置焦点为一的控件或得焦点,但是我改了这个序列号,也没什么影响。这是个第一个问题。第二个问题是大家看看,这个对话框的最后return FALSE;就是说没有返回到默认的窗口消息,处理函数,也就是没让window处理别的消息,完全屏蔽(不知道这么说对不对),但是键盘的箭头按键还起作用,tap也起作用。这是为什么搞不懂,苦恼啊!
解决方案 »
- MFC下CtabCtrl控件弹出子窗口后覆盖CtabCtrl控件
- 一个thread中创建多个window
- 为什么定时器内的画图函数没有执行 ?
- 通过调用CoGetClassObject 我已经成功进入了DllGetClassObject可是运行下来总是会有异常抛出啊
- 在DLL中的代码如何与另外一个EXE程序同步?
- 请问静态链接库可以加入类吗?
- 动态链接库连接入应用程序时出现问题: 无法打开文件“***.lib”
- 如何动态改变控件的背景颜色?
- 请推荐几个国外最好的编程网站和论坛
- 调用GetOpenFileName()时如何传递参数?
- 求救 无法打开文件“d3d9.dll” T_T
- 如果没有clw文件,阅读MFC文件应该怎么入手?
另外关于窗口过程和对话框过程的不同在windows程序设计上这本书上有讲,你找一下。
这样理解?和你的想法相反