挑战CSDN所有牛人,送200分,子窗口得不到键盘消息,SDK,//高手帮我哦,全SDK,可我写的这个代码子窗口得不到键盘消息
/*
高手帮我哦,全SDK,
hwnd1是hwnd2 的母窗口,
回调函数:hwnd1 (WndProc1),hwnd2 (WndProc2)
子窗口HWND2只能得到鼠标消息,键盘消息得不到,
而且也显示不了WM_PAINT中要显示的“22222”,
*/
#include "stdafx.h"
#include "stdio.h"
HINSTANCE hinst;LRESULT CALLBACK WndProc1(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if(msg==WM_DESTROY)
{ PostQuitMessage(0);return  0;}
if(msg==WM_KEYDOWN||msg==WM_LBUTTONDOWN)
{MessageBox(hwnd,"1111111111111111","1111111111111",MB_OK);}
return DefWindowProc(hwnd, msg, wParam, lParam);   
}
LRESULT CALLBACK WndProc2(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if(msg==WM_DESTROY)
{ PostQuitMessage(0);return  0;}
if(msg==WM_KEYDOWN||msg==WM_LBUTTONDOWN)
{MessageBox(hwnd,"2222222222222","22222222222222",MB_OK);}
if(msg==WM_PAINT)
{
PAINTSTRUCT ps;HDC hdc;
BeginPaint(hwnd,&ps);
char * str="22222222222";
TextOut(hdc,0,0,str,strlen(str));
EndPaint(hwnd,&ps); }
int n=DefWindowProc(hwnd, msg, wParam, lParam);
return n;
   
}
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WndProc2(HWND, UINT, WPARAM, LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
hinst = hInstance; 
MSG msg;
WNDCLASSEX wcex1;
wcex1.cbSize = sizeof(WNDCLASSEX); 
wcex1.style = CS_HREDRAW | CS_VREDRAW;
wcex1.lpfnWndProc = (WNDPROC)WndProc1;
wcex1.cbClsExtra = 0;
wcex1.cbWndExtra = 0;
wcex1.hInstance = hInstance;
wcex1.hIcon = NULL;//LoadIcon(hInstance, (LPCTSTR)IDI_WINSAMPLE1);
wcex1.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex1.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex1.lpszMenuName = NULL;//(LPCSTR)IDC_WINSAMPLE1;
wcex1.lpszClassName = "winsample";
wcex1.hIconSm = NULL;//LoadIcon(wcex1.hInstance, (LPCTSTR)IDI_SMALL);
RegisterClassEx(&wcex1);
HWND hwnd=CreateWindow("winsample", "winsample", WS_OVERLAPPEDWINDOW,
0,0,800,600,
  //CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 
  NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);

WNDCLASSEX wcex2;
wcex2.cbSize = sizeof(WNDCLASSEX); 
wcex2.style = CS_HREDRAW | CS_VREDRAW;
wcex2.lpfnWndProc = (WNDPROC)WndProc2;
wcex2.cbClsExtra = 0;
wcex2.cbWndExtra = 0;
wcex2.hInstance = hInstance;
wcex2.hIcon = NULL;//LoadIcon(hInstance, (LPCTSTR)IDI_WINSAMPLE1);
wcex2.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex2.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex2.lpszMenuName = NULL;//(LPCSTR)IDC_WINSAMPLE1;
wcex2.lpszClassName = "win2";
wcex2.hIconSm = NULL;//LoadIcon(wcex2.hInstance, (LPCTSTR)IDI_SMALL);
RegisterClassEx(&wcex2);
//HWND hwnd2=CreateWindow("win2", "win2", WS_CHILDWINDOW|WS_VISIBLE, \
  //CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, \
  0,0,50,50,\
  hwnd, NULL, hInstance, NULL);
HWND hwnd2=CreateWindowEx(WS_EX_CLIENTEDGE,"win2", "win2", WS_CHILDWINDOW|WS_VISIBLE,   
  0,0,50,50,
  hwnd, NULL, hInstance, NULL);
ShowWindow(hwnd2, nCmdShow);
UpdateWindow(hwnd2); while (GetMessage(&msg, NULL, 0, 0)) 
{

{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} return msg.wParam;
}

解决方案 »

  1.   

    点鼠标的时候,点到哪个窗口是知道的,因为有坐标;键盘输入的时候,怎么知道输入到哪个窗口呢?只有通过“焦点”来判断,你的程序中焦点在主窗口,所以子窗口是收不到键盘消息的。
    方法是:要有激活,就是鼠标点击hwnd2的时候,告诉主窗口现在由子窗口接收键盘消息,主窗口在收到键盘消息的时候,转发给子窗口:SendMessage(hwnd, ...)。另外,需要提供一种方式让用户知道现在获得输入焦点的是你的控件,比如虚线框,或者输入光标。
      

  2.   

    谢谢各位,程序判断,钩子……都想过,
    不过MS EDIT究竟用的什么技术 只简单的CREATEWINDOW 后就行了。
    我想可能关键在于WINDOW STYLE的设置上,不过试过后还是不行……
      

  3.   

    1。字窗口不能显示字符的问题:
       WndProc2函数的WM_PAINT消息,必须
       hdc = BeginPaint(hwnd,&ps);
    2.hwnd2不能接收键盘消息的问题
      在UpdateWindow(hwnd2)之后加SetFocus(hwnd2);
      但是你的代码只能接收一次键盘输入,原因是接收输入后弹出MessageBox,当确定了MessageBox后,系统将hwnd1活动,但是hwnd1没有再次使hwnd2成为焦点。可以这样测试:将MessageBox替换为TextOut,
    如下:
    char str[20];
    if(msg == WM_KEYDOWN)
    sprintf(str,"KeyDown:%c",wParam);
    else
    sprintf(str,"LbuttonDown");
    HDC hdc = GetDC(hwnd);
    TextOut(hdc,0,0,str,lstrlen(str));
    ReleaseDC(hwnd,hdc);
    你可以看到hwnd2一直相应键盘和鼠标消息.
    另外,强烈建议楼主的代码写的规范些,第一个问题恐怕就是糟糕的排版造成的疏忽
      

  4.   

    谢谢东方,可是问题仍然没有解决。
    子窗口不能显示字符是因为HWND1屏蔽了HWND2,MS EDIT不知道怎么做到的反屏蔽。
    可能要设置窗口特殊的STYLE.另外如何让子窗口被点一下后就可以获得输入焦点呢?
    而且还不用显式调用SETFOCUS(子窗口HWND);比如MS EDIT就没有。
    perhaps set hwnd's style or styleex to some var cetain,then all ok.改成这样,
    在UpdateWindow(hwnd2)之后加SetFocus(hwnd2);#include "stdafx.h"
    #include "stdio.h"
    HINSTANCE hinst;LRESULT CALLBACK WndProc1(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    if(msg==WM_DESTROY)
    { PostQuitMessage(0);return  0;}
    if(msg==WM_KEYDOWN||msg==WM_LBUTTONDOWN)
    {MessageBox(hwnd,"1111111111111111","1111111111111",MB_OK);}
    return DefWindowProc(hwnd, msg, wParam, lParam);   
    }
    LRESULT CALLBACK WndProc2(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    if(msg==WM_DESTROY)
    { PostQuitMessage(0);return  0;}
    //if(msg==WM_KEYDOWN||msg==WM_LBUTTONDOWN){MessageBox(hwnd,"2222222222222","22222222222222",MB_OK);}
    if(msg==WM_KEYDOWN||msg==WM_LBUTTONDOWN)
    {
                      char * str="2222222";
               HDC hdc = GetDC(hwnd);
    TextOut(hdc,0,0,str,strlen(str));
    ReleaseDC(hwnd,hdc);
    return 0;
    }; if(msg==WM_PAINT)
    {
    PAINTSTRUCT ps;HDC hdc;
    BeginPaint(hwnd,&ps);
    char * str="22222222222";
    TextOut(hdc,0,0,str,strlen(str));
    EndPaint(hwnd,&ps);
    }
    int n=DefWindowProc(hwnd, msg, wParam, lParam);
    return n;
       
    }
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK WndProc2(HWND, UINT, WPARAM, LPARAM);
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    hinst = hInstance; 
    MSG msg;
    WNDCLASSEX wcex1;
    wcex1.cbSize = sizeof(WNDCLASSEX); 
    wcex1.style = CS_HREDRAW | CS_VREDRAW;
    wcex1.lpfnWndProc = (WNDPROC)WndProc1;
    wcex1.cbClsExtra = 0;
    wcex1.cbWndExtra = 0;
    wcex1.hInstance = hInstance;
    wcex1.hIcon = NULL;//LoadIcon(hInstance, (LPCTSTR)IDI_WINSAMPLE1);
    wcex1.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex1.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex1.lpszMenuName = NULL;//(LPCSTR)IDC_WINSAMPLE1;
    wcex1.lpszClassName = "winsample";
    wcex1.hIconSm = NULL;//LoadIcon(wcex1.hInstance, (LPCTSTR)IDI_SMALL);
    RegisterClassEx(&wcex1);
    HWND hwnd=CreateWindow("winsample", "winsample", WS_OVERLAPPEDWINDOW,
    0,0,800,600,
      //CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 
      NULL, NULL, hInstance, NULL);
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    WNDCLASSEX wcex2;
    wcex2.cbSize = sizeof(WNDCLASSEX); 
    wcex2.style = CS_HREDRAW | CS_VREDRAW;
    wcex2.lpfnWndProc = (WNDPROC)WndProc2;
    wcex2.cbClsExtra = 0;
    wcex2.cbWndExtra = 0;
    wcex2.hInstance = hInstance;
    wcex2.hIcon = NULL;//LoadIcon(hInstance, (LPCTSTR)IDI_WINSAMPLE1);
    wcex2.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex2.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex2.lpszMenuName = NULL;//(LPCSTR)IDC_WINSAMPLE1;
    wcex2.lpszClassName = "win2";
    wcex2.hIconSm = NULL;//LoadIcon(wcex2.hInstance, (LPCTSTR)IDI_SMALL);
    RegisterClassEx(&wcex2);
    //HWND hwnd2=CreateWindow("win2", "win2", WS_CHILDWINDOW|WS_VISIBLE, \
      //CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, \
      0,0,50,50,\
      hwnd, NULL, hInstance, NULL);
    HWND hwnd2=CreateWindowEx(WS_EX_CLIENTEDGE,"win2", "win2", WS_CHILDWINDOW|WS_VISIBLE,   
      0,0,50,50,
      hwnd, NULL, hInstance, NULL);
    ShowWindow(hwnd2, nCmdShow);
    UpdateWindow(hwnd2);
    SetFocus(hwnd2); while (GetMessage(&msg, NULL, 0, 0)) 
    {

    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    } return msg.wParam;
    }
      

  5.   

    1。 这个没有必要用钩子
    2。为什么1111得不到键盘? 关键是MessageBox() 返回又导致焦点没有了
    3。不是没有得到焦点,而已看不见而已,如 Mackz(在相互) 所说:绘制 虚线 什么的 让人可以看出来
    4 。你的代码有点不规范
    5。 在你的代码里加一句话就可以了
     代码如下:
    #include "windows.h"
    #include "stdio.h"
    HINSTANCE hinst;LRESULT CALLBACK WndProc1(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    if(msg==WM_DESTROY)
    { PostQuitMessage(0);return  0;}
    if(msg==WM_KEYDOWN||msg==WM_LBUTTONDOWN)
    {MessageBox(hwnd,"1111111111111111","1111111111111",MB_OK);}
    return DefWindowProc(hwnd, msg, wParam, lParam);   
    }
    LRESULT CALLBACK WndProc2(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    if(msg==WM_DESTROY)
    { PostQuitMessage(0);return  0;}
    if(msg==WM_KEYDOWN||msg==WM_LBUTTONDOWN)
    {MessageBox(hwnd,"2222222222222","22222222222222",MB_OK);
    SetFocus(hwnd);  //在这加一句~注意只加了这一句 头文件被我改了,你可以改回去可了~
    }
    if(msg==WM_PAINT)
    {
    PAINTSTRUCT ps;HDC hdc;
    BeginPaint(hwnd,&ps);
    char * str="22222222222";
    TextOut(hdc,0,0,str,strlen(str));
    EndPaint(hwnd,&ps); }
    int n=DefWindowProc(hwnd, msg, wParam, lParam);
    return n;
       
    }
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK WndProc2(HWND, UINT, WPARAM, LPARAM);
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    hinst = hInstance; 
    MSG msg;
    WNDCLASSEX wcex1;
    wcex1.cbSize = sizeof(WNDCLASSEX); 
    wcex1.style = CS_HREDRAW | CS_VREDRAW;
    wcex1.lpfnWndProc = (WNDPROC)WndProc1;
    wcex1.cbClsExtra = 0;
    wcex1.cbWndExtra = 0;
    wcex1.hInstance = hInstance;
    wcex1.hIcon = NULL;//LoadIcon(hInstance, (LPCTSTR)IDI_WINSAMPLE1);
    wcex1.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex1.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex1.lpszMenuName = NULL;//(LPCSTR)IDC_WINSAMPLE1;
    wcex1.lpszClassName = "winsample";
    wcex1.hIconSm = NULL;//LoadIcon(wcex1.hInstance, (LPCTSTR)IDI_SMALL);
    RegisterClassEx(&wcex1);
    HWND hwnd=CreateWindow("winsample", "winsample", WS_OVERLAPPEDWINDOW,
    0,0,800,600,
      //CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 
      NULL, NULL, hInstance, NULL);
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    WNDCLASSEX wcex2;
    wcex2.cbSize = sizeof(WNDCLASSEX); 
    wcex2.style = CS_HREDRAW | CS_VREDRAW;
    wcex2.lpfnWndProc = (WNDPROC)WndProc2;
    wcex2.cbClsExtra = 0;
    wcex2.cbWndExtra = 0;
    wcex2.hInstance = hInstance;
    wcex2.hIcon = NULL;//LoadIcon(hInstance, (LPCTSTR)IDI_WINSAMPLE1);
    wcex2.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex2.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex2.lpszMenuName = NULL;//(LPCSTR)IDC_WINSAMPLE1;
    wcex2.lpszClassName = "win2";
    wcex2.hIconSm = NULL;//LoadIcon(wcex2.hInstance, (LPCTSTR)IDI_SMALL);
    RegisterClassEx(&wcex2);
    //HWND hwnd2=CreateWindow("win2", "win2", WS_CHILDWINDOW|WS_VISIBLE, \
      //CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, \
      0,0,50,50,\
      hwnd, NULL, hInstance, NULL);
    HWND hwnd2=CreateWindowEx(WS_EX_CLIENTEDGE,"win2", "win2", WS_CHILDWINDOW|WS_VISIBLE,   
      0,0,50,50,
      hwnd, NULL, hInstance, NULL);
    ShowWindow(hwnd2, nCmdShow);
    UpdateWindow(hwnd2); while (GetMessage(&msg, NULL, 0, 0)) 
    {

    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    } return msg.wParam;
    }
      

  6.   

    1。 这个没有必要用钩子
    2。为什么1111得不到键盘? 关键是MessageBox() 返回又导致焦点没有了
    3。不是没有得到焦点,而已看不见而已,如 Mackz(在相互) 所说:绘制 虚线 什么的 让人可以看出来
    4 。你的代码有点不规范
    5。 在你的代码里加一句话就可以了
     代码如下:
    #include "windows.h"
    #include "stdio.h"
    HINSTANCE hinst;LRESULT CALLBACK WndProc1(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    if(msg==WM_DESTROY)
    { PostQuitMessage(0);return  0;}
    if(msg==WM_KEYDOWN||msg==WM_LBUTTONDOWN)
    {MessageBox(hwnd,"1111111111111111","1111111111111",MB_OK);}
    return DefWindowProc(hwnd, msg, wParam, lParam);   
    }
    LRESULT CALLBACK WndProc2(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    if(msg==WM_DESTROY)
    { PostQuitMessage(0);return  0;}
    if(msg==WM_KEYDOWN||msg==WM_LBUTTONDOWN)
    {MessageBox(hwnd,"2222222222222","22222222222222",MB_OK);
    SetFocus(hwnd);  //在这加一句~注意只加了这一句 头文件被我改了,你可以改回去可了~
    }
    if(msg==WM_PAINT)
    {
    PAINTSTRUCT ps;HDC hdc;
    BeginPaint(hwnd,&ps);
    char * str="22222222222";
    TextOut(hdc,0,0,str,strlen(str));
    EndPaint(hwnd,&ps); }
    int n=DefWindowProc(hwnd, msg, wParam, lParam);
    return n;
       
    }
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK WndProc2(HWND, UINT, WPARAM, LPARAM);
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    hinst = hInstance; 
    MSG msg;
    WNDCLASSEX wcex1;
    wcex1.cbSize = sizeof(WNDCLASSEX); 
    wcex1.style = CS_HREDRAW | CS_VREDRAW;
    wcex1.lpfnWndProc = (WNDPROC)WndProc1;
    wcex1.cbClsExtra = 0;
    wcex1.cbWndExtra = 0;
    wcex1.hInstance = hInstance;
    wcex1.hIcon = NULL;//LoadIcon(hInstance, (LPCTSTR)IDI_WINSAMPLE1);
    wcex1.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex1.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex1.lpszMenuName = NULL;//(LPCSTR)IDC_WINSAMPLE1;
    wcex1.lpszClassName = "winsample";
    wcex1.hIconSm = NULL;//LoadIcon(wcex1.hInstance, (LPCTSTR)IDI_SMALL);
    RegisterClassEx(&wcex1);
    HWND hwnd=CreateWindow("winsample", "winsample", WS_OVERLAPPEDWINDOW,
    0,0,800,600,
      //CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 
      NULL, NULL, hInstance, NULL);
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    WNDCLASSEX wcex2;
    wcex2.cbSize = sizeof(WNDCLASSEX); 
    wcex2.style = CS_HREDRAW | CS_VREDRAW;
    wcex2.lpfnWndProc = (WNDPROC)WndProc2;
    wcex2.cbClsExtra = 0;
    wcex2.cbWndExtra = 0;
    wcex2.hInstance = hInstance;
    wcex2.hIcon = NULL;//LoadIcon(hInstance, (LPCTSTR)IDI_WINSAMPLE1);
    wcex2.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex2.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex2.lpszMenuName = NULL;//(LPCSTR)IDC_WINSAMPLE1;
    wcex2.lpszClassName = "win2";
    wcex2.hIconSm = NULL;//LoadIcon(wcex2.hInstance, (LPCTSTR)IDI_SMALL);
    RegisterClassEx(&wcex2);
    //HWND hwnd2=CreateWindow("win2", "win2", WS_CHILDWINDOW|WS_VISIBLE, \
      //CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, \
      0,0,50,50,\
      hwnd, NULL, hInstance, NULL);
    HWND hwnd2=CreateWindowEx(WS_EX_CLIENTEDGE,"win2", "win2", WS_CHILDWINDOW|WS_VISIBLE,   
      0,0,50,50,
      hwnd, NULL, hInstance, NULL);
    ShowWindow(hwnd2, nCmdShow);
    UpdateWindow(hwnd2); while (GetMessage(&msg, NULL, 0, 0)) 
    {

    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    } return msg.wParam;
    }
      

  7.   

    原来你在呀? 我看你ID ,不是你说给我电子书的吗??我加了你MSN 了,~
      

  8.   

    http://community.csdn.net/Expert/topic/3949/3949030.xml?temp=.3083002 楼主,我的问题,你看一下,你在下面留了一个MSN,  我还在等呢
      

  9.   

    thanks to surstar.
    but hwnd2 still can't show "22222222" on starting.
      

  10.   

    1.初始时子窗口不能显示字符是因为HWND1屏蔽了HWND2,
    MS EDIT不知道怎么做到的反屏蔽。2.如何让子窗口被点一下后就可以获得输入焦点呢?
    而且还不用显式调用SETFOCUS(子窗口HWND);比如MS EDIT就没有。可能要设置窗口特殊的STYLE.
      

  11.   

    这个问题其实比较简单,你们想得过于复杂了,原因就是hwnd2没有获得Focus,就像一个编辑框,在一个对话框中如果没有Focus,也一样不能输入字符
    只要楼主在点击到这个窗口的时候给它SetFocus,就能输入字符了:
    LRESULT CALLBACK WndProc2(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    if(msg==WM_DESTROY)
    {
    PostQuitMessage(0);
    return  0;
    }
    if(msg==WM_KEYDOWN)
    {
    MessageBox(hwnd,"2222222222222","22222222222222",MB_OK);
    }
    if(msg==WM_LBUTTONDOWN)
    {
    SetFocus(hwnd);
    }
    if(msg==WM_PAINT)
    {
    PAINTSTRUCT ps;
    HDC hdc;
    char * str="22222222222";
    BeginPaint(hwnd,&ps);
    TextOut(hdc,0,0,str,strlen(str));
    EndPaint(hwnd,&ps); }
    int n=DefWindowProc(hwnd, msg, wParam, lParam);
    return n;
       
    }
      

  12.   

    2.如何让子窗口被点一下后就可以获得输入焦点呢?
    而且还不用显式调用SETFOCUS(子窗口HWND);比如MS EDIT就没有。
    谁都没有Edit的实现代码,但我想Edit窗口的属性就决定了他可以点击获得Focus,类似的还有按钮,其实现方式大概也就像上面一样,鼠标点击调用SetFocus,这是可以的,但是一些Static窗口,鼠标点击就不能获得Focus,这些都是这些窗口的代码如何实现决定的
      

  13.   

    第二个就算是解决了吧。
    这个呢?
    1.初始时子窗口不能显示字符是因为HWND1屏蔽了HWND2,
    MS EDIT不知道怎么做到的反屏蔽。
      

  14.   

    NND,显示光标有问题,停会贴源代码。
      

  15.   

    我给你一个程序 发给我你的mail地址 我发给你
      

  16.   

    改为这样
    if(msg==WM_LBUTTONDOWN)
    {
    SetFocus(hwnd);
    }
    if(msg==WM_KEYDOWN)
    {
    MessageBox(hwnd,"Key","22222222222222",MB_OK);
    }
    在2000下调试成功 
    以后发贴请不要写这样的标题 看了不舒服