鱼C论坛

 找回密码
 立即注册
查看: 2254|回复: 4

[已解决]为什么调用WM_PAINT却在应用程序上显示不会出来?

[复制链接]
发表于 2015-8-12 19:47:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <windows.h>
#include <tchar.h>
#include <wchar.h>
#define WINAPI __stdcall


//声明回调程序
LRESULT CALLBACK MyWndProc(HWND wnd, UINT msg, WPARAM wParam, LPARAM Lparam);

const TCHAR szWindowsClass[] = TEXT("第一个窗口");
const TCHAR szWindowsTitle[] = TEXT("主窗口标题");

int WINAPI WinMain(HINSTANCE hInstance,
        HINSTANCE iPrevInsrance,
        LPTSTR lpCmdLine,
        int nCmdShow){

        WNDCLASSEX wnd = { 0 };
        wnd.cbSize = sizeof(WNDCLASSEX);  
        wnd.style = CS_HREDRAW | CS_VREDRAW;
        wnd.lpfnWndProc = (WNDPROC)MyWndProc;  
        wnd.cbWndExtra = 0;  
        wnd.cbClsExtra = 0;
        wnd.hInstance = hInstance;   //引用程序实例句柄
        wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wnd.hCursor = LoadCursor(NULL, IDC_ARROW);  
        wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wnd.lpszClassName = szWindowsClass;
        RegisterClassEx(&wnd);

        //窗口创建
        HWND hWnd = CreateWindow(szWindowsClass,
                szWindowsTitle,
                WS_OVERLAPPEDWINDOW,
                CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                HWND_DESKTOP, NULL,
                hInstance,NULL);
        if (!hWnd){
                MessageBox(NULL, TEXT("注册窗口创建失败."), TEXT("失败提示"), MB_OKCANCEL);
        }

        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);     
        /*
                消息循环
        */
        MSG msg;
        while (GetMessage(&msg, NULL, 0, 0)){
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        return msg.wParam; //返回的是窗口参数
}
LRESULT CALLBACK MyWndProc(HWND wnd,
        UINT msg,
        WPARAM wParam,
        LPARAM Lparam){
        int mymsg = 0;
        switch (msg){
        case WM_DESTROY:  
                        PostQuitMessage(0);
                        return 0;
        case WM_PRINT:{
                TCHAR * str = TEXT("Hello world!");
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(wnd, &ps);
                RECT r;
                GetClientRect(wnd, &r);
                SetTextColor(hdc, RGB(255, 0, 0));
                DrawText(hdc, str,-1, &r, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
                TextOut(hdc, 2, 2, str, _tcslen(str));
                EndPaint(wnd, &ps);
                return 0;
        }
        /*case WM_NCPAINT:
        {
                WCHAR * str1 = TEXT("Hello world!";)
                HDC hdc;
                hdc = GetDCEx(hwnd, (HRGN)wParam, DCX_WINDOW | DCX_INTERSECTRGN);
                // Paint into this DC

                TextOut(hdc, 100, 100, str1, _tcslen(str));
                ReleaseDC(hwnd, hdc);
                return 1;
        }*/

        default:
                return DefWindowProc(wnd, msg, wParam, Lparam);
        }
}
最佳答案
2015-8-18 11:38:35
  1. #include <windows.h>
  2. #include <tchar.h>
  3. #include <wchar.h>
  4. #define WINAPI __stdcall


  5. //声明回调程序
  6. LRESULT CALLBACK MyWndProc(HWND wnd, UINT msg, WPARAM wParam, LPARAM Lparam);

  7. const TCHAR szWindowsClass[] = TEXT("第一个窗口");
  8. const TCHAR szWindowsTitle[] = TEXT("主窗口标题");

  9. int WINAPI WinMain(HINSTANCE hInstance,
  10.         HINSTANCE iPrevInsrance,
  11.         LPTSTR lpCmdLine,
  12.         int nCmdShow){

  13.         WNDCLASSEX wnd = { 0 };
  14.         wnd.cbSize = sizeof(WNDCLASSEX);
  15.         wnd.style = CS_HREDRAW | CS_VREDRAW;
  16.         wnd.lpfnWndProc = (WNDPROC)MyWndProc;
  17.         wnd.cbWndExtra = 0;
  18.         wnd.cbClsExtra = 0;
  19.         wnd.hInstance = hInstance;   //引用程序实例句柄
  20.         wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  21.         wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
  22.         wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  23.         wnd.lpszClassName = szWindowsClass;
  24.         RegisterClassEx(&wnd);

  25.         //窗口创建
  26.         HWND hWnd = CreateWindow(szWindowsClass,
  27.                 szWindowsTitle,
  28.                 WS_OVERLAPPEDWINDOW,
  29.                 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  30.                 HWND_DESKTOP, NULL,
  31.                 hInstance, NULL);
  32.         if (!hWnd){
  33.                 MessageBox(NULL, TEXT("注册窗口创建失败."), TEXT("失败提示"), MB_OKCANCEL);
  34.         }

  35.         ShowWindow(hWnd, nCmdShow);
  36.         UpdateWindow(hWnd);
  37.         /*
  38.         消息循环
  39.         */
  40.         MSG msg;
  41.         while (GetMessage(&msg, NULL, 0, 0)){
  42.                 TranslateMessage(&msg);
  43.                 DispatchMessage(&msg);
  44.         }
  45.         return msg.wParam; //返回的是窗口参数
  46. }
  47. LRESULT CALLBACK MyWndProc(HWND wnd,
  48.         UINT msg,
  49.         WPARAM wParam,
  50.         LPARAM Lparam){
  51.         int mymsg = 0;
  52.         switch (msg){
  53.         case WM_DESTROY:
  54.                 PostQuitMessage(0);
  55.                 return 0;
  56.         case WM_NCPAINT:{
  57.                                           TCHAR * str = TEXT("Hello world!");
  58.                                           PAINTSTRUCT ps;
  59.                                           HDC hdc = BeginPaint(wnd, &ps);
  60.                                           RECT r;
  61.                                           GetClientRect(wnd, &r);
  62.                                           SetTextColor(hdc, RGB(255, 0, 0));
  63.                                           DrawText(hdc, str, -1, &r, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  64.                                           TextOut(hdc, 2, 2, str, _tcslen(str));
  65.                                           EndPaint(wnd, &ps);
  66.                                           //MessageBox(NULL, TEXT("结束绘画"), TEXT("提示"), MB_OKCANCEL);
  67.                                           return 0;
  68.         }

  69.         default:
  70.                 return DefWindowProc(wnd, msg, wParam, Lparam);
  71.         }
  72. }
复制代码


楼主不知道窗口加载完才能绘画么:shock:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-17 07:44:17 | 显示全部楼层
   咱们码农有力量,嘿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-18 11:19:28 | 显示全部楼层
顶起来!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-18 11:25:14 | 显示全部楼层
我怀疑消息队列中根本就没有收到输出内容的消息:cry:cry
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-18 11:38:35 | 显示全部楼层    本楼为最佳答案   
  1. #include <windows.h>
  2. #include <tchar.h>
  3. #include <wchar.h>
  4. #define WINAPI __stdcall


  5. //声明回调程序
  6. LRESULT CALLBACK MyWndProc(HWND wnd, UINT msg, WPARAM wParam, LPARAM Lparam);

  7. const TCHAR szWindowsClass[] = TEXT("第一个窗口");
  8. const TCHAR szWindowsTitle[] = TEXT("主窗口标题");

  9. int WINAPI WinMain(HINSTANCE hInstance,
  10.         HINSTANCE iPrevInsrance,
  11.         LPTSTR lpCmdLine,
  12.         int nCmdShow){

  13.         WNDCLASSEX wnd = { 0 };
  14.         wnd.cbSize = sizeof(WNDCLASSEX);
  15.         wnd.style = CS_HREDRAW | CS_VREDRAW;
  16.         wnd.lpfnWndProc = (WNDPROC)MyWndProc;
  17.         wnd.cbWndExtra = 0;
  18.         wnd.cbClsExtra = 0;
  19.         wnd.hInstance = hInstance;   //引用程序实例句柄
  20.         wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  21.         wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
  22.         wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  23.         wnd.lpszClassName = szWindowsClass;
  24.         RegisterClassEx(&wnd);

  25.         //窗口创建
  26.         HWND hWnd = CreateWindow(szWindowsClass,
  27.                 szWindowsTitle,
  28.                 WS_OVERLAPPEDWINDOW,
  29.                 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  30.                 HWND_DESKTOP, NULL,
  31.                 hInstance, NULL);
  32.         if (!hWnd){
  33.                 MessageBox(NULL, TEXT("注册窗口创建失败."), TEXT("失败提示"), MB_OKCANCEL);
  34.         }

  35.         ShowWindow(hWnd, nCmdShow);
  36.         UpdateWindow(hWnd);
  37.         /*
  38.         消息循环
  39.         */
  40.         MSG msg;
  41.         while (GetMessage(&msg, NULL, 0, 0)){
  42.                 TranslateMessage(&msg);
  43.                 DispatchMessage(&msg);
  44.         }
  45.         return msg.wParam; //返回的是窗口参数
  46. }
  47. LRESULT CALLBACK MyWndProc(HWND wnd,
  48.         UINT msg,
  49.         WPARAM wParam,
  50.         LPARAM Lparam){
  51.         int mymsg = 0;
  52.         switch (msg){
  53.         case WM_DESTROY:
  54.                 PostQuitMessage(0);
  55.                 return 0;
  56.         case WM_NCPAINT:{
  57.                                           TCHAR * str = TEXT("Hello world!");
  58.                                           PAINTSTRUCT ps;
  59.                                           HDC hdc = BeginPaint(wnd, &ps);
  60.                                           RECT r;
  61.                                           GetClientRect(wnd, &r);
  62.                                           SetTextColor(hdc, RGB(255, 0, 0));
  63.                                           DrawText(hdc, str, -1, &r, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  64.                                           TextOut(hdc, 2, 2, str, _tcslen(str));
  65.                                           EndPaint(wnd, &ps);
  66.                                           //MessageBox(NULL, TEXT("结束绘画"), TEXT("提示"), MB_OKCANCEL);
  67.                                           return 0;
  68.         }

  69.         default:
  70.                 return DefWindowProc(wnd, msg, wParam, Lparam);
  71.         }
  72. }
复制代码


楼主不知道窗口加载完才能绘画么:shock:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 15:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表