m_listctrl.InsertColumn(0, _T("Text"), LVCFMT_LEFT, 50);
static LV_ITEM lvi;lvi.mask = LVIF_TEXT;
lvi.iItem = 0;
lvi.iSubItem = 0;
lvi.pszText = _T("aaa");
int nItem = m_listctrl.InsertItem(&lvi);memset(&lvi, 0, sizeof(lvi));
lvi.mask = LVIF_TEXT;
lvi.iItem = 1;
lvi.iSubItem = 0;
lvi.pszText = _T("aaa");
nItem = ::DefWindowProc(m_listctrl.m_hWnd, LVM_INSERTITEM, 0, (LPARAM) &lvi);上面的代码我插入了2行到m_listctrl, 但是为什么只有m_listctrl.InsertItem(&lvi)插入成功,
::DefWindowProc(m_listctrl.m_hWnd, LVM_INSERTITEM, 0, (LPARAM) &lvi)插入失败?

解决方案 »

  1.   

    DefWindowProc is called with the same parameters received by the window procedure.
      

  2.   

    This function calls the default window procedure to provide default processing for any window messages that an application does not process. This function ensures that every message is processed. DefWindowProc is called with the same parameters received by the window procedure.
      

  3.   

    你把 DefWindowProc 当 SendMessage 用 ?DefWindowProc 的 参数 是当前 消息,与你 修改 (给的 消息) 无关
      

  4.   

    DefWindowProc 不是可以用来处理消息吗,只需给出窗口句柄和参数吗
      

  5.   

    DefWindowProc 的 参数 是当前消息队列里的 消息。与你随意给的参数 没用的。
    如 你需要 WM_PAINT
    那么 DefWindowProc 就是 WM_PAINT 消息发来 参数。你 任意 给一个 不行的, 要用 SendMessage()。
      

  6.   

    函数功能:该函数调用缺省的窗口过程来为应用程序没有处理的任何窗口消息提供缺省的处理。该函数确保每一个消息得到处理。调用DefWindowProc函数时使用窗口过程接收的相同参数。
    函数原型:LRESULT DefWindowProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);
      

  7.   

    DefWindowProc这个函数是默认的窗口处理函数,我们可以把不关心的消息都丢给它来处理。这个函数在处理关闭窗口消息WM_CLOSE时,是调用DestroyWindow函数关闭窗口并且发WM_DESTROY消息给应用程序;而它对WM_DESTROY这个消息是不处理的(考虑为什么?);我们在应用程序中对这个消息的处理是发出WM_QUIT消息。因此WM_CLOSE、WM_DESTROY、WM_QUIT这三个消息是先后产生的。
      

  8.   

    DefWindowProc Function
    --------------------------------------------------------------------------------
    The DefWindowProc function calls the default window procedure to provide default processing for any window messages that an application does not process. This function ensures that every message is processed. DefWindowProc is called with the same parameters received by the window procedure. 
    Syntax
    LRESULT DefWindowProc( HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
    );
    Parameters
    hWnd
    [in] Handle to the window procedure that received the message. 
    Msg
    [in] Specifies the message. 
    wParam
    [in] Specifies additional message information. The content of this parameter depends on the value of the Msg parameter. 
    lParam
    [in] Specifies additional message information. The content of this parameter depends on the value of the Msg parameter. 
    Return Value
    The return value is the result of the message processing and depends on the message. 
    Res
    Windows 95/98/Me: DefWindowProcW is supported by the Microsoft Layer for Unicode (MSLU). To use this, you must add certain files to your application, as outlined in Microsoft Layer for Unicode on Windows 95/98/Me Systems .
    Example
    For an example, see Designing a Window Procedure.
    Function Information
    Minimum DLL Version user32.dll 
    Header Declared in Winuser.h, include Windows.h 
    Import library User32.lib 
    Minimum operating systems Windows 95, Windows NT 3.1 
    Unicode Implemented as ANSI and Unicode versions
    编辑本段范例/*------------------------------------------------------------
    HELLOWIN.C -- Displays "Hello, Windows 98!" in client area
    (c) Charles Petzold, 1998
    ------------------------------------------------------------*/
    #include <windows.h>
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;//声明
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR szCmdLine, int iCmdShow) //命令行参数,窗口显示方式
    {
    static TCHAR szAppName[] = TEXT ("HelloWin") ;
    HWND hwnd ; 
    MSG msg ; 
    WNDCLASS wndclass ;
    wndclass.style = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc = WndProc ;
    wndclass.cbClsEx tra = 0 ;
    wndclass.cbWndExtra = 0 ;
    wndclass.hInstance = hInstance ;
    wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName = NULL ;
    wndclass.lpszClassName = szAppName ;
    if (!RegisterClass (&wndclass))
    {
    MessageBox (NULL, TEXT ("This program requires Windows NT!"), 
    szAppName, MB_ICONERROR) ;
    return 0 ;
    }
    hwnd = CreateWindow (szAppName, // window class name
    TEXT ("The Hello Program"), // window caption
    WS_OVERLAPPEDWINDOW, // window style
    CW_USEDEFAULT, // initial x position
    CW_USEDEFAULT, // initial y position
    CW_USEDEFAULT, // initial x size
    CW_USEDEFAULT, // initial y size
    NULL, // parent window handle
    NULL, // window menu handle
    hInstance, // program instance handle
    NULL) ; // creation parameters
    ShowWindow (hwnd, iCmdShow) ;
    UpdateWindow (hwnd) ;
    while (GetMessage (&msg, NULL, 0, 0))
    {
    TranslateMessage (&msg) ;//
    DispatchMessage (&msg) ;
    }
    return msg.wParam ;
    }
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    HDC hdc ;
    PAINTSTRUCT ps ;
    RECT rect ;
    switch (message)
    {
    case WM_CREATE:
    PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
    return 0 ;
    case WM_PAINT:
    hdc = BeginPaint (hwnd, &ps) ;
    GetClientRect (hwnd, &rect) ;
    DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,
    DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
    EndPaint (hwnd, &ps) ;
    return 0 ;
    case WM_DESTROY:
    PostQuitMessage (0) ;
    return 0 ;
    }
    return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
      

  9.   

    int CGfxListCtrl::InsertItemEx(const int iIndex, const INT_PTR lData)
    {
    static LV_ITEM lvi;
    lvi.mask = LVIF_TEXT|LVIF_PARAM;
    lvi.iItem = iIndex;
    lvi.iSubItem = 0;
    lvi.pszText = LPSTR_TEXTCALLBACK;
    lvi.lParam = lData; return (int) DefWindowProc(LVM_INSERTITEM, 0, (LPARAM) &lvi);
    }这样做是可以正确插入的,只是突然在win8上面不行了,所有有此一问
      

  10.   

    编程就是要按规矩办事,用技巧会碰到失效问题。
    SendMessage 是正规途径。