ary Надо точно определить, что значит "при запуске нескольких копий приложения".
Хорошо , тогда давайте для простоты дела установим, что может быть запущено только 2 копии приложения - и не более.
Можно не пользоваться примитивами синхронизации и всё сделать на сообщениях.
Надо сделать обработчики для трёх событий:
-- "рисовать первую часть"
-- "рисовать вторую часть"
-- "я готов"
При создании окна надо послать самому себе сообщение "рисовать первую часть". Обработчик для этого события выставляет флаг "первая часть". Обрабочик события для WM_PAINT при поднятом флаге "первая часть" русует первую кривую.
После отрисовки первой кривой надо взвести флаг "я готов к второй кривой" и послать сообщение "я готов" всем окнам (или сначала найти подходящие окна через EnumWindows), в том числе и себе. Обработчик события "я готов" проверяет, сколько сообщений получено. Если получено два сообщения (от себя и от того парня), то уже можно рисовать вторую кривую. Посылаешь себе сообщение "рисовать вторую часть".
Обработчик сообщения "рисовать вторую часть" указывает, что при перерисовке окна надо рисовать вторую кривую, например сбрасывает флаг "первая часть" и взводит флаг "вторая часть". обработчик для WM_PAINT, при поднятом флаге "вторая часть", рисует вторую кривую.
Вот такая концептуальная схема. Я пока не пользовался MFC, но полагаю, туда можно добавить обработчики для нестандартных событий.