仅在从函数返回后执行操作

时间:2013-12-06 07:25:51

标签: winforms visual-studio-2010 visual-c++ c++-cli hwnd

我遇到了一个小问题,我在一个函数中写了一些代码,应该在一块板上显示一些图片,我只能在整个函数完成后看到图片。这是:

(在以下代码中,pictures是一个PictureBoxes)数组

void static paint_path(ArrNode* node)
{
    list<int> head=(NG->game->getboard()).getcolored();
    int place=-1;
    while(head.size())
    {
        place=head.back();
        head.pop_back();
        if(node[place].color == white)
            pictures[place]->ImageLocation = "white-.bmp"; /*THIS LINE*/
        else if(node[place].color == black)
        {
            pictures[place]->ImageLocation = "black-.bmp"; /*AND THIS LINE*/
        }
    }
}

我需要及时执行这2行/ THIS LINE / / 和THIS LINE /,而不仅仅是在功能完成之后。实际上,只有在调用调用此函数的函数返回的函数之后才能显示图片。那是为什么?!

谢谢

修改

我通过Windows.h中的stdafx.hstdafx.h中的Form1来推进。 现在,正如 ScottMcP-MVP 建议的那样,我正在尝试使用UpdateWindow().我读到UpdateWindow()采用类型为HWND的变量。所以我在我的函数中定义了以下内容:(取自another thread

的定义
HWND hwnd = ::CreateWindowA("STATIC","dummy",WS_VISIBLE,0,0,100,100,NULL,NULL,NULL,NULL);
::SetWindowTextA(hwnd,"Window!");

并调用UpdateWindow(hwnd);

但我一直收到错误:

Error 15 error LNK2028: unresolved token (0A00001D) "extern "C" int __stdcall UpdateWindow(struct HWND__ *)" (?UpdateWindow@@$$J14YGHPAUHWND__@@@Z) referenced in function "private: static void __clrcall GUI::Form1::paint_path(struct b_node *)" (?paint_path@Form1@GUI@@$$FCMXPAUb_node@@@Z) C:\...\GUI.obj

还有什么帮助?

提前致谢

1 个答案:

答案 0 :(得分:1)

延迟的原因是当函数执行时,绘图代码没有执行。函数返回后,消息处理恢复,并将处理WM_PAINT。您可以调用UpdateWindow API以在函数期间立即强制绘制。