鱼C论坛

 找回密码
 立即注册
查看: 2435|回复: 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
#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_NCPAINT:{
                                          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);
                                          //MessageBox(NULL, TEXT("结束绘画"), TEXT("提示"), MB_OKCANCEL);
                                          return 0;
        }

        default:
                return DefWindowProc(wnd, msg, wParam, Lparam);
        }
}

楼主不知道窗口加载完才能绘画么: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 | 显示全部楼层    本楼为最佳答案   
#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_NCPAINT:{
                                          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);
                                          //MessageBox(NULL, TEXT("结束绘画"), TEXT("提示"), MB_OKCANCEL);
                                          return 0;
        }

        default:
                return DefWindowProc(wnd, msg, wParam, Lparam);
        }
}

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 19:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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